c#多线程如何锁定com组件
我在做项目的时候遇到一个问题:我们的算法引用了matlab函数,所以我们将matlab函数做成了com组件,然后由c#调用,因为com组件是非托管资源,所以节省内存空间避免每次都实例化一个com类,我们将其定义为一个静态变量在程序中引用,一开始我们用的是串行的方式,没有任何问题,后来我们为了加快程序运行速度,将代码分为几个线程同时跑,因为是静态变量所以我们要加锁防止线程冲突,但是现在在多线程跑到引用的代码处有时跑着跑着不知什么时候就会出写乱七八糟的错(比如未处理的comexception,或者调用com就不返回了,一直死在那里等等),好像是没有锁住,我们用过很多锁,(Monitor,lock,Mutex,ManualResetEvent,AutoResetEvent,WaitHandler)等等,一直没有用,,是不是锁不能锁住非托管资源呢?请问还有什么更好的方法么?
...全文
相关推荐
c#多线程的奥妙,多线程的概念STAThread教程+源代码,非常好的.
在C#中,主线程的ApartmentState默认为STA(Single Threaded Apartment),这是为了支持COM组件的交互。
c#中的serialport控件
在C#编程中,`SerialPort`控件是.NET框架提供的一种用于实现串行通信的组件。串行通信是一种通过串行接口进行数据传输的方式,通常用于设备间的短距离通信,如打印机、GPS接收器或嵌入式系统。
检查VSS上自己或其它人占用的文件
**Interop服务**:C#通过添加对COM组件的引用,如Microsoft.Vss.Interop,可以与VSS进行通信。这允许C#代码创建和操作VSS对象,例如打开VSS数据库、查询信息等。
C#源码C#操作Excel大全
在异常处理方面,需特别关注内存泄漏(尤其是Interop未正确释放COM对象)、线程同步问题(Excel COM对象非线程安全)、文件锁定冲突(多进程同时访问同一文件)、权限限制(UAC与沙箱环境)、格式兼容性
c#.net读写excle
**Microsoft Office Interop**: 这是.NET中最传统的读写Excel的方式,通过COM组件与Excel应用程序进行交互。


