已经通过代码证实了,一个dll文件不能被并行调用。
我该怎么用C#封装这个dll ?

解决方案 »

  1.   

    不能说dll中的函数都不能被并行调用。但是如果dll本身使用了全局变量,并且没有做同步,肯定是不行的,你的dll就是这个情况。那么你需要自己同步,也就是保证始终只有一个线程在调用:object lockobj = new object();
    Parallel.For(0, _dtpost.Rows.Count, (i) =>
                {  
                    string ip = _dtpost.Rows[i][2].ToString();
                    newka newkas = new newka(ip, 3000, 1);
                    lock (lockobj)
                    {
                        PingTask(_dtpost.Rows[i], newkas);
                    }
                     Thread.Sleep(300);
                }); 
      

  2.   

    这个dll里不支持多线程,也没什么好的办法了 ,只能看看多进程是不是能解决问题。
      

  3.   

    我说了,dll和是否能并行无关。所以如果你可以修改dll的源代码,那么完善这个dll,使之成为线程安全的是首要的解决方案。
      

  4.   

    多搞几个进程呗。
    如果你不知道dll里面写的什么,是不是有独占资源,还是别多开了。