2017-03-04 69 views
0

我需要在處理某些操作期間顯示帶有微調框的窗口。 這個窗口應該是模型,所以我使用的ShowDialog()方法:在並行線程中顯示模式對話框

void ShowDlg() { 
     Thread WindowThread = new Thread(() => 
    { 
     SpinnerWindow spinnerWindow = new SpinnerWindow(); 
     spinnerWindow.ShowDialog(); 
     System.Windows.Threading.Dispatcher.Run(); 
    }); 
     WindowThread.SetApartmentState(ApartmentState.STA); 
     WindowThread.Start(); 
} 

那麼一些過程完成後,我試圖關閉這個模式窗口:

   WindowThread.Interrupt(); 
      if (!WindowThread.Join(2000)) 
      { 
       WindowThread.Abort(); 
      } 

,一切運作良好,直到我嘗試第二次調用ShowDlg()。我得到下一個異常:

調用線程不能訪問此對象,因爲不同的線程擁有它。

我在做什麼錯,可能是不正確關閉創建線程?

回答

2

您可能再次從另一個線程中調用ShowDialog。在這種情況下,您應該調用您的主窗體,如下所示:

mainForm.Invoke(spinnerWindow.ShowDialog());