在并行线程中显示模态对话框

时间:2017-03-04 18:15:33

标签: c# .net wpf multithreading

我需要在处理一些动作时用旋转器显示窗口。 这个窗口应该是模型,所以我使用的是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()。我有下一个例外:

  

调用线程无法访问此对象,因为另一个线程拥有它。

我做错了什么,也许错误地关闭了创建的帖子?

1 个答案:

答案 0 :(得分:2)

你可能再次从另一个线程中调用ShowDialog。在这种情况下,您应该像这样调用主表单:

mainForm.Invoke(spinnerWindow.ShowDialog());