BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #4838同步于 2017/9/24
dotNET机器人发帖

c# 多线程调用COM组件如何不阻塞

wf751620780
2017/9/24镜像同步0 回复
我在一个小程序里面调用了一个别人编写的COM组件。 以下是COM组件的提供者写的说明: 首先,要注意的是,****插件是仅支持com的STA线程模型,高级语言中使用****插件,必须使用STA模型。 这样效率最高. MTA也可以,但是不同线程调用同个对象接口的同步必须自己完成.插件内部没有考虑这点. 我在自己的C#程序中是这样调用的: 3个Threading.Thread线程,每个线程里面使用一个该COM组件的一个实例化对象,我在主线程里面只是建立这些变量的引用。他们的实例化只会在各自所属的线程里面初始化。即如下: public class Test { COM a=null; COM b=null; Thread ta=null; Thread tb=null; public test() { Thread ta=new Thread(new ParameterizedThreadStart(FunctionA)); ta.IsBackground=true; ta.start(); Thread tb=new Thread(new ParameterizedThreadStart(FunctionB)); tb.IsBackground=true; tb.start(); } private void FunctionA(object obj) { if(a=null) a=new COM(); while(true) { a.function1(); Thread.Sleep(5); } } private void FunctionB(object obj) { if(b=null) b=new COM(); while(true) { b.function1(); Thread.Sleep(5); } } } 然而,在执行的时候出现了问题,当线程ta调用a对象时会阻塞tb线程。当线程tb调用b对象时会阻塞ta线程。 如何才能解决这种注射问题呢? 比如让a与b对象分别拥有不同的变量内存和指令内存,以使得两个线程在使用相同的COM组件创建的不同对象不会产生临界资源。 我该用什么方法呢?
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。