簡體   English   中英

C#中未捕獲未處理的異常

[英]Unhandled exception not caught in C#

我使用以下代碼來處理程序中的所有未處理的異常。 但是異常沒有傳播到指定方法的問題。

 [STAThread]
    static void Main()
    {


        AppDomain currentDomain = default(AppDomain);
        currentDomain = AppDomain.CurrentDomain;
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        // Handler for unhandled exceptions.
        currentDomain.UnhandledException += GlobalUnhandledExceptionHandler;
        // Handler for exceptions in threads behind forms.
        System.Windows.Forms.Application.ThreadException += GlobalThreadExceptionHandler;


        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FormMain());
    }

  private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
    {
        Exception ex = (Exception)e.ExceptionObject;        

        MessageBox.Show(ex.Message,
                                  "Important",
                                  MessageBoxButtons.YesNo);
    }

    private static void GlobalThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        Exception ex = e.Exception;

        MessageBox.Show(ex.Message,
                                 "Important",
                                 MessageBoxButtons.YesNo);

    }

FormMain有一個backgroundWorker對象。 這個后台工作者是應用程序的大部分工作者,如果在doWork方法中有異常,它就不會像我期望的那樣傳播。這是我在MainForm中使用的后台工作者的代碼。

 private void button_startSync_Click(object sender, EventArgs e)
 {            
     backgroundWorker1.RunWorkerAsync(getSettings());\          
 }

  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  {        

     // ... processing code
     // Unhandled Exception will generated in this method...           
  }

請告訴我這里做錯了什么,我希望我的程序中的任何地方生成的異常都被上面的那些全局處理程序捕獲,以便報告錯誤/異常以進行修復。

謝謝,

這是設計使然,BackgroundWorker類捕獲DoWork事件處理程序中引發的任何異常。 並在RunWorkerCompleted事件處理程序的e.Error屬性中公開它。 所以這樣寫:

  private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
  { 
      if (e.Error != null) throw e.Error;
      // etc..
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM