用VC++写的DLL,导出函数是完成“发送网络请求,使用返回结果”的功能,根据网络情况的不同,有时会有点耗时。在C#中使用单线程调用该DLL非常正常。为达到充分利用网络资源的目的,用C#在多个线程中异步调用该DLL却出现地址冲突等问题(DLL中的地址冲突)。尝试在C#中用lock锁住,就正常了!但是用lock的话,就相当于需等待某个线程执行完DLL中函数后,其他线程才能再执行DLL中的函数,变成了典型的“顺序执行”了,这样就无法达到“充分利用网络资源”的目的了。请问C#中如何才能实现多个线程并发执行DLL中函数呢?谢谢

解决方案 »

  1.   

    看来你的dll不支持多线程,或者说其中用到了不支持多线程的对象
      

  2.   

    堵塞式的调用,尤其是在长时间计算的情况下,相当不利于并发,
    可以使用函数指针来解决,当计算出结果时,调用传入的函数。。
    从而反应到c#中。
    注意,c#中的委托地址,很容易回GC改变或回收,为保证委托的地址在运行期间不会发生变化,需要用gc.Keepalive方面的方法做保证。甚至c#中静态的方法的地址在运行期间都会改变。