【发布时间】:2017-01-25 17:32:54
【问题描述】:
当我的主窗口正在渲染时,我需要创建带有加载 gif 的窗口。我已经阅读了一些文章并决定为此我需要创建新线程。我在this article 中做到了
结果我有类似的东西:
LoadingDialog _loadingDlg;
Thread loadingThread;
public void ShowLoading()
{
loadingThread = new Thread(new ThreadStart(loadingThreadWork));
loadingThread.SetApartmentState(ApartmentState.STA);
loadingThread.Start();
}
private void loadingThreadWork()
{
_loadingDlg = new LoadingDialog();
_loadingDlg.Show();
System.Windows.Threading.Dispatcher.Run();
}
public void HideLoading()
{
_loadingDlg.Dispatcher.InvokeShutdown();
}
当我第一次打电话给ShowLoading() 和HideLoading() 时,一切都如我所愿。但是当我第二次拨打ShowLoading() 时,我在
_loadingDlg.Show();
带有消息The calling thread cannot access this object because a different thread owns it。
这怎么可能? _loadingDlg 是在上一行中创建的,并且在同一个线程中。
【问题讨论】:
-
为什么要新建一个窗口?为什么不直接制作一个居中的网格,并且可以切换可见性?
标签: c# wpf multithreading dispatcher sta