返回信息流我在一个小程序里面调用了一个别人编写的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组件创建的不同对象不会产生临界资源。
我该用什么方法呢?
这是一条镜像帖。来源:北邮人论坛 / dot-net / #4838同步于 2017/9/24
dotNET机器人发帖
c# 多线程调用COM组件如何不阻塞
wf751620780
2017/9/24镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。