WPF与Windows Forms - STAThread

5

我是WPF的新手,有几个关于WPF和Windows Forms集成的问题。

我有一个现有的Visual C# Windows Forms应用程序。我想将它与一个WPF窗口集成,可以在单击按钮时显示。这是不可能的,因为WPF希望调用线程为STAThread,并且默认情况下WinForm假定该线程为MTAThread。我尝试使用具有STAThread公寓状态的新线程来调用WPF UI,但这并没有起作用。我还尝试使用Dispatcher.BeginInvoke方法和Background Worker,但它们都没有解决问题。

1)我们能否在不将主线程标记为STAThread的情况下调用WPF窗口/控件?如果可能的话,请指导我正确的方向。 2)如果实现此目标的唯一方法是使主线程成为STAThread,那么对应用程序的总体性能/响应性是否会产生影响。

提前致谢。

1个回答

8
我认为最简单的解决方法是让你的WinForms线程在STA中执行。在winforms应用程序中使用STA线程没有任何问题(实际上往往是默认设置)。
您可以通过在程序的主方法中添加以下行来解决此问题:
[STAThreadAttribute]
static void Main(string[] args)

1
事实上,对于OLE拖放和某些COM组件接口的工作,需要STA。 - Gishu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接