2011-07-05 61 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")處放置斷點,會發生什麼情況?