我需要在处理一些动作时用旋转器显示窗口。 这个窗口应该是模型,所以我使用的是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()。我有下一个例外:
调用线程无法访问此对象,因为另一个线程拥有它。
我做错了什么,也许错误地关闭了创建的帖子?
答案 0 :(得分:2)
你可能再次从另一个线程中调用ShowDialog
。在这种情况下,您应该像这样调用主表单:
mainForm.Invoke(spinnerWindow.ShowDialog());