令人惊讶的是,通过在 Dispatcher 上调用 ShowDialog() 可以一次显示多个对话框:
uiDispatcher.BeginInvoke(new Func<bool?>(myWindow.ShowDialog));
这是如何工作的,一旦显示对话框,UI 仍会继续响应用户交互(我不认为因为 ShowDialog() 会阻止它所在的线程必须是 UI 线程),甚至可以继续显示新对话框:
Window myWindow;
for(int i = 0; i < 5; i ++)
{
myWindow = new Window();
uiDispatcher.BeginInvoke(new Func<bool?>(myWindow.ShowDialog));
}
并且 UI 仍然是响应式的。
依赖这种行为有什么我应该提防的吗?(当某些后台线程想要时,我想在另一个对话框之上显示一个对话框 - 这很有效 - 唯一不需要的行为似乎是在切换应用程序时,有时 WPF 不知道哪个对话框应该在顶部 - 但仍然允许你带一个通过单击将对话框移到前面,这对于对话框来说是不常见的,因为通常不允许在对话框外部单击)。
更新:我遇到的一个问题是,如果您隐藏其中一个对话框,用户可以再次与所有其他 Windows 交互!(不仅仅是其他对话框)。请参阅:WPF 对话框不是模态的?