场景是这样的:我想在某个Windows Form程序的Program类中统一处理所有未捕获的异常:    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new LoginPoint());
            }
            catch (Exception myException)
            {
                //向日志文件记录异常
            }
        }
    }
然后经过测试,发现某些多线程操作的地方异常没法到这里统一处理(多线程的操作用的是BackgroundWorker):        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            //DOWORK
            throw new Exception("TEST!");
        }        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                throw new Exception("I GOT TEST");
            }
            //TODO
        }
我的目的是想让异常“I GOT TEST”能在Program类中处理,但“不调试运行”中还是跳出了系统的异常框,也就是没能成功地在Program类中处理。请问大家有什么看法,是否能帮帮我。异常多线程Windows

解决方案 »

  1.   

    http://www.google.com.hk/search?newwindow=1&safe=strict&hl=zh-CN&q=Application.ThreadException&btnG=Google+%E6%90%9C%E7%B4%A2当你的vs遇到异常中断时,它立刻显示了一个CheckBox选项:“遇到此异常时终端”,你可以取消此选择。你也可以按快捷键Ctrl+D+E来设置。
      

  2.   

    我已经在StackOverflow上找到答案了,大家可能没有弄明白我的意思,还是谢谢你们了。
    答案:
    http://stackoverflow.com/questions/16084155/how-to-handle-the-exception-of-backgroundworker-in-the-main-process
      

  3.   

    可以在RunWorkerCompleted的e.Error中处理DoWork中出现的异常;
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.threadexception.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
    也可以看看这个.