2017-03-04 67 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());