在我的WPF应用程序,我有时是一个System.Windows.MessageBox
。 当最初显示,它会显示在我的应用程序主窗口之上,如我所愿。 有没有一种方法,我可以迫使它一直保持在主窗口的顶部? 我的问题是,当MessageBox
显示,用户可以单击主窗口的应用程序并将其置于前端,这意味着MessageBox
变为隐藏的。 在这种情况下,用户可能没有意识到它的存在,或者忘掉它,而对他们来说,主要的应用程序似乎已经冻结。
我读过一些关于这个主题的,但没有解决这个问题对我来说。
我应该补充的是,线搭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
直到其解雇)。
这是把消息框上的应用程序窗口上方的快捷方式。
MessageBox.Show(this ,"Output text"));
里面你的“ public partial class MainWindow : Window
”将下面的代码。 因此,调用将运行UI线程内的代码。
void ShowErrorMessage(ERROR err)
{
this.Dispatcher.Invoke((Action)(() =>
{
MessageBox.Show(err.description, err.code.ToString(), MessageBoxButton.OK, MessageBoxImage.Error);
}));
}