2010-03-30 22 views
0

這與This one非常相似,很遺憾,也沒有人回答過。經過長時間的計算後,MessageBox不會顯示在mdi窗體上

我有一個MDI主要論壇,承載幾個孩子的形式。其中一個進行長時間計算,並在發生錯誤時引發異常(所有工作都在同一個線程上完成)。然後我嘗試通過消息框通知用戶有錯誤,但是它不出現(但是從MDI Main竊取焦點,所以應用程序完全沒有響應)。

如果我調用Application.DoEvents()(邪惡我知道,但這是最後的手段),beheviour會稍微改變。然後,表單保持完全活動狀態,只有在將活動應用程序(Alt + Tab)更改爲其他內容並返回後,纔會顯示消息框。

我能做些什麼來確保消息框可見?我已經試過將MessageBox.Show方法的參數傳遞給活動的孩子和MDI Main。它不會改變行爲。

澄清:在MessageBox是子窗體的一部分,但在這一點上,我願意以顯示它在不休息應用程序的任何方式。消息框應該是模態的,但它應該是可見的,以便用戶可以確認它。

+0

你還有這個問題嗎? – ChrisBD 2010-04-06 08:58:43

+0

我寫了一個使用另一個線程顯示消息框的解決方法。我仍然認爲這個問題沒有回答,但我的解決方案是一種解決方法,所以我不認爲我會用它來回答我自己的問題。 – 2010-04-06 15:33:56

回答

0

MessageBox顯示在MainForm中還是作爲ChildForms的一部分?如果MessageBox在子窗體中,也許可以將事件傳回MainForm並在那裏打開MessageBox。

0

問題是,messageboxes往往是模態。 在這種情況下,我認爲在主MDI代碼中使用帶有處理程序的委託或事件會更好。這樣你的主應用程序就會顯示消息框。如果您希望傳遞您需要的任何信息,則可以輕鬆重新定義EventArgsType。

1

我有同樣的問題。當按下ALT時彈出顯示。

原來是AutoSize屬性爲true的LinkedLabel。 LinkedLabel在FlowLayoutPanel中。當我將LinkedLabel.Text屬性設置爲String.Empty時。 LinkedLabel不斷嘗試調整大小,這導致GUI不斷繁忙。

當我關閉AutoSize屬性並且GUI不再需要重新計算位置時。 GUI不是免費的。彈出窗口顯示。

可能有其他控件行爲相同。 另請參閱: https://connect.microsoft.com/VisualStudio/feedback/details/116884