2008-10-19 135 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