2008-10-19 138 views
5

我是WPF的新手,并有一些关于WPF和Windows窗体集成的问题。WPF与Windows窗体 - STAThread

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

1)我们可以打电话给WPF窗口/控件而不将主标记为STAThread?如果可能的话,任何人都可以请我指出一个正确的方向? 2)如果要实现这一目标的唯一方法是通过将主线程设置为STAThread,将会对应用程序的整体性能/响应性产生任何影响。

在此先感谢。

回答

8

我认为最简单的解决方案是让你的WinForms线程在STA中执行。有一个STA线程winforms应用程序没有什么问题(实际上它通常是默认的)。

可以通过添加下面一行到你的程序的主要方法解决这个问题:

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

其实是需要OLE拖放和某些COM组件的接口工作STA .. – Gishu 2008-10-19 16:52:25