2011-07-05 18 views
3

モーダルダイアログウィンドウでエラーが発生したときにメッセージボックスを表示しようとしていますが、何らかの理由で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 

*サイドノート:この場合、私はShowMessageのInvokeRequiredセクションは必要ありませんが、私は何とかその場合には(完全性のためにそれを左問題を引き起こしている可能性があります)。私はそれがバックグラウンドスレッドから呼び出されたときに、他の場合にそれを持っています。この特定のインスタンスでは、デバッグ時にElseブランチを通過します。

+2

メッセージボックスがダイアログの下に表示される可能性はありますか? –

+0

それは論理的な答えのようですが、私はそう信じません。私は画面上にダイアログを移動しましたが、現場にはまだMessageBoxはありません。タスクバーのウィンドウとしても表示されません。 – TKTS

答えて

0

メインスレッドが他のタスクをブロックしていないか確認してください。その後、電話はMe.Invoke(New _showMessage(AddressOf ShowMessage), message)でブロックされ、MessageBoxは表示されません。

MessageBox.Show(message, "ERROR")にブレークポイントを設定するとどうなりますか?

関連する問題