本帖最后由 moranhuoshou 于 2014-11-07 15:41:08 编辑

解决方案 »

  1.   

    你线程是用来干什么的,连接数据库的么?那你可以直接写一个类啊,线程调用的方法都写在一个类里面,在new这个类的时候,把线程打开~
      

  2.   

    同时对N个oracle数据库,推送数据,每个数据库地址不同。
      

  3.   

    这种情况使用哪个数据库连接一定要随上下文传进去的,至于你用方法参数还是属性还是Thread.SetData都可以如果没办法传进去,比如SendMoreGrainTemp根本不是为多线程的场景设计的,那你在外边就只有一件事可做,就是保证同时只在一个线程里调用它
      

  4.   

    private void testlock(int index)
    {
              _oracleconnect = connectlist[index];
              
    }
    i作为参数传进去,在里面取字符串
      

  5.   

    你的线程根本没有参数
    所以线程方法根本不知道该上哪里去找自己对应的字符串
    你应该给线程传递参数private void testlock(object str)
    调用的时候
    threads[i].Start(string);//每个线程传入不同的字符串
      

  6.   

    private void testlock(object state)
    {
        string connectionString = (string)state;
        lock (obj)
        {
            SendMoreGrainTemp(connectionString);
        }
    }// 不用全局变量,而是把线程需要的‘参数’传递进去。
    threads[i] = new Thread(nthis.testlock);
    threads[i].Start(connectlist[i]);
      

  7.   

    OK,OK。问题解决。错误原因正如1楼所说,所以才造成了,连接字符串总是错乱的原因。我本以为,一个变量而已,Lock主就行了,没想到啊。。早知道就传参数了。。类似9楼就行,上面基本都是说在点子上。谢谢各位指教。