Force MessageBox to be on top of application window in .net/WPF

后端 未结 3 1027
粉色の甜心
粉色の甜心 2020-12-30 03:03

In my WPF app, I sometimes being up a System.Windows.MessageBox. When it is initially displayed, it is shown on top of my main application window, as I would li

相关标签:
3条回答
  • 2020-12-30 03:40

    This is a quick way of putting the Message Box on top of the application windows.

    MessageBox.Show(this ,"Output text"));

    0 讨论(0)
  • 2020-12-30 03:41

    Use the version of MessageBox.Show that takes a Window "owner" and pass your window.

    MessageBox.Show(Application.Current.MainWindow, "Im always on top - of the main window");
    

    If your possibly not on the UI thread try:

    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);
        }));
    }
    

    You can:
    1. Invoke to block your thread until MessageBox is dismissed OR
    2. BeginInvoke in which case your thread code will continue to execute but UI thread will block on MessageBox until its dismissed).

    0 讨论(0)
  • 2020-12-30 03:50

    Inside your "public partial class MainWindow : Window" place the following code. So the Invoke will run your code inside UI thread.

    void ShowErrorMessage(ERROR err)
    {
        this.Dispatcher.Invoke((Action)(() =>
        {
            MessageBox.Show(err.description, err.code.ToString(), MessageBoxButton.OK, MessageBoxImage.Error);
        }));
    }
    
    0 讨论(0)
自定义标题
段落格式
字体
字号
代码语言
提交回复
热议问题