带有Windows窗体的WPF-STAThread

本文关键字:WPF-STAThread 窗体 Windows 带有 | 更新日期: 2023-09-27 17:47:49

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

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

1) 我们可以在不将Main标记为STAThread的情况下调用WPF窗口/控件吗?如果可能的话,有人能给我指一个合适的方向吗?2) 如果实现这一点的唯一方法是使主线程成为STAThread,那么会对应用程序的总体性能/响应性产生任何影响吗。

提前谢谢。

带有Windows窗体的WPF-STAThread

我认为最简单的解决方案是让WinForms线程在STA中执行。拥有STA线程winforms应用程序没有错(事实上,它通常是默认的)。

您可以通过在程序的主要方法中添加以下行来解决此问题:

[STAThreadAttribute]
static void Main(string[] args)