2014-01-17 31 views
2

根據以下代碼創建Window時,出現「Invalid window handle」異常。這是在一個單獨的線程上調用的。它不是每次拋出,而是隨機發生。此外,我無法查看異常堆棧跟蹤和它說:「{Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}爲什麼我在使用其他線程創建窗口時,有時會出現「無效窗口句柄」異常

private void ShowDialog() 
{ 
    Thread thread = new Thread(() => 
     { 
      waitContainer = MakeSimpleWindow(); 
      this.waitContainer.Closed += new EventHandler(waitingWindow_Closed); 

      waitContainer.ShowDialog(); 

      System.Windows.Threading.Dispatcher.Run(); 
     }); 
     thread.SetApartmentState(ApartmentState.STA); 
     thread.IsBackground = true; 
     thread.Start(); 
} 

public Window MakeSimpleWindow() 
    { 
     Window w = new Window(); // Exception occurs from here 
     w.Title = Attributes[MessageBoxAttribute.message];    
     return w; 
    } 

回答

4

的2線:

waitContainer.ShowDialog();\  
System.Windows.Threading.Dispatcher.Run(); 

起碼有競爭狀態。當ShowDialog開始執行時,線程尚未運行分派器。

但是答案不是如何解決這個問題。雖然你可以執行更多的調度程序,但這不是一個好主意。尋找一個解決方案,在其中運行1個GUI線程(主線程)並用Invoke和事件解決其他問題。

相關問題