2010-11-15 92 views

回答

24

通常,WPF線程的入口點方法將[STAThreadAttribute]設置爲ThreadMethod,或者在使用Thread.SetApartmentState()創建線程時將公寓狀態設置爲STA。但是,這隻能在線程啓動之前設置。

如果你不能這個屬性適用於正在執行此任務線程的應用程序的入口點,請嘗試以下操作:

void Installer1_AfterInstall(object sender, InstallEventArgs e) 
{ 
    var thread = new Thread(new ThreadStart(DisplayFormThread)); 

    thread.SetApartmentState(ApartmentState.STA); 
    thread.Start(); 
    thread.Join(); 
} 

private void DisplayFormThread() 
{ 
    try 
    { 
     MainWindow ObjMain = new MainWindow(); 
     ObjMain.Show(); 
     ObjMain.Closed += (s, e) => System.Windows.Threading.Dispatcher.ExitAllFrames(); 

     System.Windows.Threading.Dispatcher.Run(); 
    } 
    catch (Exception ex) 
    { 
     Log.Write(ex); 
    } 
} 
+1

[請將STAThreadAttribute] 私人無效DisplayFormThread(){ 嘗試 { 的MainWindow = ObjMain新的主窗口(); ObjMain.Show(); } catch(Exception ex) { Log.Write(ex); } } – anbuselvan 2010-11-15 12:33:54

+0

對不起,我不瞭解您的評論。 'STAThreadAttribute'可以縮短爲'STAThread';支持。你是這個意思嗎? – 2010-11-15 12:50:07

+0

這不起作用,[STAThread]僅在程序入口點(主)上被識別。改用Thread.SetApartmentState()。你還必須運行一個消息循環,Application.Run()。 – 2010-11-15 12:56:55

4

我有這樣的錯誤之前和最簡單的方法是使用Dispatcher
見我Questionanswer

好運

+0

請告訴我爲什麼這個答案是壞的,這是我的解決方案的自然本能 – 2012-05-28 16:19:50

+0

你必須問誰從誰投票! – Rev 2012-05-29 04:13:54

+0

是的,但我不能這是爲什麼我離開這個開放的帖子邀請任何知道這個解決方案有什麼問題的人回答 – 2012-06-01 00:35:27

相關問題