2014-03-27 47 views
0

在visual C#中,發生異常時,請調用消息框以顯示錯誤消息。如何在不等待消息框關閉的情況下繼續執行我的程序。如何顯示消息框並保持應用程序執行

+1

您是否需要顯示消息框?爲什麼不把錯誤記錄到控制檯或文本文件並從那裏讀取?否則請參閱http://stackoverflow.com/questions/10634663/messagebox-that-allows-a-process-to-continue-automatically – KJ3

+0

我希望這可以幫助。 http://stackoverflow.com/questions/3059487/create-a-modeless-messagebox – Jumpei

+1

你應該記錄異常,然後_fix the problem_。例外通常意味着你的代碼被破壞了。所以修復它。 –

回答

4

除了使用MessageBox.Show之外,您可以製作自己的錯誤消息Form並使用Form.Show()方法以非模式方式顯示。這將允許你的UI線程繼續滾動。

當然這也意味着你將不得不自己設置一些東西,比如大小,文本對齊方式等等。但是,如果你真的只想用它來完成一項任務,那應該不會太麻煩。我不得不說,但我覺得你的方法很奇怪。通常,當發生錯誤並且想讓用戶知道該錯誤時,您希望應用程序保持到消息框關閉。不這樣做可能會導致很多不確定的問題。例如:如果在錯誤已經顯示時發生另一個錯誤會發生什麼?

如果在UI線程處於保持狀態時需要完成特定任務,我強烈建議您在可能的情況下考慮在新線程中執行此操作。這應該給你想要的,同時保持最終用戶的體驗達到預期。

+0

感謝您的建議 –

1

如果你絕對需要在非阻塞方式運行它,你可以初始化一個單獨的線程的消息框:

Task.Run(() => MessageBox.Show("Test")); 

此外,如果你要傳達的對話的結果(OK /取消),可能整個方法必須在新線程中運行。

Task.Run(
    () => 
     { 
      if (MessageBox.Show("Test", "test", MessageBoxButtons.OkCancel) == DialogResult.OK) 
      { 
       MessageBox.Show("Ok"); 
      } 
      else 
      { 
       MessageBox.Show("Cancel"); 
      } 
     } 
    ); 
+0

請注意在其他線程中運行UI操作。 – Crono

+0

絕對不建議。如果您絕對必須以非阻塞方式顯示消息框,我寧願將其作爲最後手段。 – PiotrWolkowski

相關問題