使用C#.NET中的OCX进行线程安全

我作为开发人员已经有一段时间没有使用OLE / COM,但我目前需要使用C#程序中的一些第三方OCX代码库.

C#程序使用线程(它是一个TCP套接字服务器). OCX标记为公寓线程模型.从我的阅读中,我得出结论,如果我小心地为每个线程创建每个OCX的一个实例,并且只从创建它的线程中使用该实例,我应该没问题.

我也做了: –

myThread.SetApartmentState(ApartmentState.STA);

在开始每个线程之前.

这应该足以确保安全使用OCX吗?

我看到的症状是线程都可以创建OCX,但在明显随机的基础上,准备和初始化OCX的调用失败.他们似乎没有返回有关原因的任何有用信息.

谁能解释我所看到的内容,或者给我一个从线程代码中安全使用这些OCX的指南?

或者,我应该放弃并在一个线程中创建每个OCX的单个实例,并通过线程安全队列或类似方式将所有调用发送给它们?

最佳答案 将组件标记为单元线程只是组件开发人员的断言.有很多组件开发人员不了解线程,甚至那些理解线程的人有时会弄错,所以信任这个断言是一种信念行为.

就个人而言,我个人非常担心在多线程环境中使用第三方组件.除了那些我知道在多线程应用程序中有非常广泛的曝光,和/或我知道我可以获得足够支持的那些.

如果您无权访问组件开发人员或组件的源代码,并且您绝对需要使用它,那么创建单个实例的选项可能是一个很好的实用解决方案.

点赞