作为开发人员,我已经有一段时间没有使用OLE/COM了,但我目前需要在C#程序中使用一些第三方OCX代码库。
C#程序使用线程(它是一个TCP套接字服务器)。这些OCX被标记为公寓线程模型。根据我的阅读,我得出结论,如果我小心地为每个线程创建一个OCX实例,并且只从创建它的线程使用该实例,那么我应该没问题。
我也做了以下操作:
myThread.SetApartmentState(ApartmentState.STA);
在每个线程开始之前,需要进行以下操作。
这样是否足以确保OCX的安全使用?
我看到的症状是,线程都可以创建OCX,但似乎是随机的,对于准备和初始化OCX的调用会失败。它们似乎没有返回任何有用的信息来解释原因。
有人能解释我所看到的情况,或者给我一个指南,告诉我如何从多线程代码中安全地使用这些OCX吗?
或者,我应该放弃,在一个线程中创建每个和所有OCX的单个实例,并通过线程安全队列或类似方法将所有调用发送到它们吗?