用VC++写的DLL,导出函数是完成“发送网络请求,使用返回结果”的功能,根据网络情况的不同,有时会有点耗时。在C#中使用单线程调用该DLL非常正常。为达到充分利用网络资源的目的,用C#在多个线程中异步调用该DLL,却出现地址冲突等问题(DLL中的地址冲突)。尝试在C#中用lock锁住,就正常了!但是用lock的话,就相当于需等待某个线程执行完DLL中函数后,其他线程才能再执行DLL中的函数,变成了典型的“顺序执行”了,这样就无法达到“充分利用网络资源”的目的了。请问C#中如何才能实现多个线程并发执行DLL中函数呢?谢谢
可以使用函数指针来解决,当计算出结果时,调用传入的函数。。
从而反应到c#中。
注意,c#中的委托地址,很容易回GC改变或回收,为保证委托的地址在运行期间不会发生变化,需要用gc.Keepalive方面的方法做保证。甚至c#中静态的方法的地址在运行期间都会改变。