【发布时间】:2009-12-07 11:33:41
【问题描述】:
我有一个包含 WinForm 的 .NET 应用程序。此 WinForm 包含一个非托管 ActiveX 控件和一些其他控件。此应用程序在独立模式下运行良好。现在我们要发布某种接口,以便可以在使用互操作功能的非托管 C++/MFC 应用程序中使用此 Winform。客户端应用程序将以非模式方式显示此表单。当用户输入详细信息时,它们会使用 COM 事件源/接收器(或连接点)方法传递给客户端。
我关注了各种文章,其中一种对我们有用的方法是 http://codebetter.com/blogs/peter.van.ooijen/archive/2005/06/03/64041.aspx
但如果我从同一个客户端应用程序启动多个线程,窗体的第二个实例会引发访问冲突异常,因为窗体上的 ActiveX 控件期望线程始终是 UI 线程(根据我的观察)。
您能否告诉我通过 Interop 向非托管客户端应用程序公开 WinForm 功能的正确方法是什么?
非常感谢
【问题讨论】:
-
您的 WinForm 应用程序是 STA 还是 MTA?
-
这是一个 STA,我为我创建的线程设置了正确的 Appartment 状态。