C#多线程调用VB COM+组件


前一阵子,开发的系统中一个用VB写的以单进程方式调用多个VB COM+组件程序由于发送速度过慢,报文要发10多个小时才能发完,需要进行优化,因为VB原生不支持多线程,所以我把它改成了C#通过后绑定多线程调用COM+组件。后绑定比较简单:但是一用多线程去调COM+,总有一部分调用会死锁在那里,半天都处理不完,后来查了一下帮助,发现必须将Thread的ApartmentState初始化为调用STA模式才行。修改后,程序性能提高了5倍。

public static object CreateComFromString(string ComObject)
{
Type comType=Type.GetTypeFromProgID(ComObject);
object comObj=Activator.CreateInstance(comType);
return comObj;
}

public static object Invoke(object ComObject, string Method, object[] Args)
{
if (ComObject==null)
throw new Exception("未能获取COM组件的实例");

return ComObject.GetType().InvokeMember(Method, BindingFlags.InvokeMethod,null,ComObject,Args);
}