我是WPF的新手,并且有一些关于WPF和Windows Forms集成的问题。
我有一个现有的Visual C#Windows窗体应用程序。我想将它与WPF窗口集成,可以通过单击按钮显示。这是不可能的,因为WPF期望调用线程是一个STAThread,默认情况下WinForm假定该线程是一个MTAThread。我尝试使用公寓状态STAThread生成一个新线程来调用WPF UI,但这不起作用。我尝试使用Dispatcher.BeginInvoke方法和后台工作程序,但没有一个解决了这个问题。
1)我们可以调用WPF窗口/控件而不将Main标记为STAThread吗?如果有可能,有人可以指出我正确的方向吗? 2)如果实现此目的的唯一方法是使主线程成为STAThread,那么对应用程序的一般性能/响应性是否会有任何影响。
提前致谢。
答案 0 :(得分:8)
我认为最简单的解决方案是让你的WinForms线程在STA中执行。拥有一个STA线程winforms应用程序没有任何问题(实际上它通常是默认值)。
您可以通过将以下行添加到程序的main方法来解决此问题:
[STAThreadAttribute]
static void Main(string[] args)