在我的WPF应用程序中,有时我会遇到System.Windows.MessageBox
。最初显示时,它会显示在我的主应用程序窗口的顶部,如我所愿。有没有一种方法可以强制我始终将其保留在主窗口的顶部?我的问题是,当显示MessageBox
时,用户可以单击主应用程序窗口并将其置于最前面,这意味着MessageBox
从 View 中隐藏了。在这种情况下,用户可能不会意识到它在那里,或者忘记了它,对他们而言,主应用似乎已冻结。
我已经阅读了许多有关此主题的主题,但是没有一个主题可以为我解决问题。
我应该补充一点,放置MessageBox
的线程可能不是UI线程。
谢谢
汤姆
最佳答案
使用带有窗口“所有者”并通过您的窗口的MessageBox.Show
版本。
MessageBox.Show(Application.Current.MainWindow, "Im always on top - of the main window");
如果您可能不在UI线程上,请尝试:
string msg="Hello!";
if (Application.Current.Dispatcher.CheckAccess()) {
MessageBox.Show(Application.Current.MainWindow, msg);
}
else {
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(()=>{
MessageBox.Show(Application.Current.MainWindow, msg);
}));
}
您可以:
1.
Invoke
阻止您的线程,直到MessageBox
被关闭或2.
BeginInvoke
,在这种情况下,您的线程代码将继续执行,但UI线程将在MessageBox
上阻塞,直到被关闭为止。
关于wpf - 强制MessageBox在.net/WPF中的应用程序窗口顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092564/