Search code examples
c#wpfmessagebox

Modal MessageBox in WPF application


I'm trying to show a standard MessageBox as a modal window in my application, but it ends up as non modal. In the first call, in the code below I'm showing a standard MessageBox which is shown modal, as it should. In the second call, it isn't shown as modal, even if I grab the main window dispatcher.

Dispatcher disp = Application.Current.MainWindow.Dispatcher;
//First call, shown MODAL
if (this.messageService.ShowYesNo("Do you want to update the Word document, this will regenerate inspectiondata for document", "") == MessageBoxResult.Yes)
{
    using (new WaitCursor())
    {
        _eventAggregator.GetEvent<ProgressBarRequestShow>().Publish("");
        worker = new BackgroundWorker();

        worker.DoWork += delegate(object s, DoWorkEventArgs args)
        {
            AITUpdateProgressDelegate update = new AITUpdateProgressDelegate(UpdateProgress);
            this.docService.UpdateWorddocument(this.docService.GetCurrentDocumentFilePath, update);
        };

        worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
        {
            try
            {
                // Second call NOT MODAL
                disp.Invoke((Action)delegate()
                {
                    this.messageService.ShowInformation("Document generated, choose Open in Word in main toolbar to show document", "");
                });
                _eventAggregator.GetEvent<ProgressBarRequestHide>().Publish("");
            }
            finally
            {
            }
        };
        worker.RunWorkerAsync();
    }
}

Solution

  • This looks like what you are looking for. The call for the message box includes an 'owner' parameter. I have used a similar concept in code that i have done before and has showed the windows as modal. Sample code can also be downloaded from the link.