wpf - 在WPF中显示多个对话框是否安全?

标签 wpf multithreading showdialog

令人惊讶的是,通过将Dispatchcher上的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 Dialog not modal?

最佳答案

显示对话框不会阻止UI线程-否则您将无法与对话框进行交互。

它仅表示以下事实:存在未完成的模态对话框,并且应禁用对所有其他非对话窗口的输入。

如果将ShowDialog调用拖到调度程序中,则调度程序将允许创建其他对话框,因为您没有执行模态对话框突出时禁止执行的操作,即将其输入到其他非对话框窗口中。

您的新对话框具有完整的功能,因为它是一个对话框,并且您不尝试输入非对话窗口。

切换应用程序应该将任何模式对话框都放在最前面,但是由于您有多个模式对话框,因此系统会感到困惑,即哪个对话框应该位于最顶层。我建议您捕获激活事件,然后手动将必要的对话框置于最顶部。

关于wpf - 在WPF中显示多个对话框是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269809/

相关文章:

c# - 在运行时合并 WPF ResourceDictionary

.net - 仅重新设计 wpf 控件的一部分。是否可以?

C# :how to have message box within an event handler that freezes the application until Ok is pressed?

c# - 如何从 System.Windows.Input.KeyEventArgs 获取按下的字符?

c# - 如何在 try catch 语句中包装 MVVM Light ViewModel?

java - Java 中的线程和多线程

java - ArrayList 的多线程打印

C++:使用io.post和bind命令从boost线程在主线程中执行函数

c# - 按下 ENTER 键后提交表格

lambda - 语言级别 7 不支持 android studio lambda 表达式