MessageBox не отображается из модального диалогового окна - PullRequest
3 голосов
/ 05 июля 2011

Я пытаюсь показать окно сообщения, когда в модальном диалоговом окне возникает ошибка, но по какой-то причине окно сообщения никогда не отображается, хотя я знаю, что метод MessageBox.Show используется.Блок try catch находится внутри обработчика событий для формы окна, которая отображается в виде модального диалога.Я знаю, что событие запускается и ошибка перехватывается, но окно сообщения никогда не открывается.Я заменил MessageBox.Show другим показом формы, и он работает нормально, но я бы предпочел использовать MessageBox вместо создания собственной формы ошибки.Я просто не могу заставить MessageBox работать.Это ограничение MessageBox?

Вот упрощенная версия того, что я делаю:

Private Sub OnSomeEvent(ByVal args As MyEventArgs) 
  Try
    'some processing
  Catch ex As Exception
    ShowMessage("An error has occurred")
  End Try
End Sub

Private Delegate Sub _showMessage(ByVal message As String)
Private Sub ShowMessage(ByVal message As String)
  If Me.InvokeRequired Then
    Me.Invoke(New _showMessage(AddressOf ShowMessage), message)
  Else
    MessageBox.Show(message, "ERROR")
    'also tried MessageBox.Show(Me, message) but no luck
  End If
End Sub

* примечание: в этом случае мне не нужен раздел InvokeRequired ShowMessage, ноЯ оставил это для полноты (на случай, если каким-то образом это может быть причиной проблемы).Он у меня есть для других случаев, когда он вызывается из фонового потока.В данном конкретном случае при отладке он проходит через ветку Else.

1 Ответ

0 голосов
/ 26 января 2012

Проверьте, не заблокирован ли основной поток при выполнении какой-либо другой задачи.Тогда вызов будет заблокирован на Me.Invoke(New _showMessage(AddressOf ShowMessage), message), и вы не увидите MessageBox.

Что произойдет, если вы установите точку останова на MessageBox.Show(message, "ERROR")?

...