我创建了一个自定义MessageWindow
,以便摆脱旧版本并将自己的风格放在上面...
我的问题是,当我点击一个按钮打开自定义MessageWindow
时,它并没有真正阻止我的用户界面。
public static void Show(string caption, string message)
{
Thread thread = new Thread(() =>
{
MessageWindow window = new MessageWindow(caption, message);
window.ShowDialog();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
我认为thread.Join
将阻止父线程,直到新线程消失,但不知何故,UI部分处于活动状态。我没有看到动画,也没有能够移动窗口但是当我在MessageWindow
打开时单击被阻止线程上的按钮时,它仍然接受点击并在我关闭{{1}后执行它} thread。
当消息窗口打开时,有没有办法禁用消息泵或阻止/锁定任何线程/ UI?
答案 0 :(得分:1)
您不应为其他窗口创建新线程。使用WPF时,所有UI都应该在同一个线程上运行。
当您想要执行与UI无关并且不想阻止UI的内容时创建新线程。
答案 1 :(得分:0)
如果您想在MessageWindow
可见时阻止用户与主窗口进行互动,只需将Owner
的{{1}}设置为应用程序的主窗口即可。然后从UI线程调用MessageWindow
,如果您调用ShowDialog()
,行为应该与之相当。
请勿使用单独的线程或尝试手动阻止消息泵。