C# 从另一个线程捕获Application.ThreadException中的错误

C# 从另一个线程捕获Application.ThreadException中的错误,c#,multithreading,.net-4.0,backgroundworker,C#,Multithreading,.net 4.0,Backgroundworker,我有一个windows from应用程序,其program.cs代码如下: static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles();

我有一个windows from应用程序,其program.cs代码如下:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.ThreadException += (sndr, evnt) => 
        { 
            MessageBox.Show("An error occur. Please contact your administrator.\nError description: " + 
                evnt.Exception.Message + "\nStack trace:\n" + evnt.Exception.StackTrace, 
                evnt.Exception.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); 
        };
        Application.Run(new frmLogin());
    }
}
但是,当在BackgroundWorker.DoWork事件中引发异常时,Application.ThreadException未捕获该异常

Application.ThreadException如何从BackgroundWorker创建的不同线程捕获异常

我知道捕获Application.ThreadException中的错误不是一个好的做法,但我们只将其用作最后一级错误捕获

我的代码是用C语言编写的,框架4,在VS2010 Pro中构建

请帮忙。提前感谢。

请参阅:BackgroundWorker异常不会像那样传播,因此您无法在ThreadException中捕获它们

抛出异常的BackgroundWorker会像往常一样调用RunWorkerCompleted,但会在事件参数上设置Error属性。

请参阅:BackgroundWorker异常不会像那样传播,因此您无法在ThreadException中捕获它们


抛出异常的BackgroundWorker会像往常一样调用RunWorkerCompleted,但会在事件参数上设置Error属性。

BackgroundWorker会捕获您的异常,不会向Application.ThreadException或AppDomain.UnhandledException公开,并将异常传递给RunWorkerCompleted事件的参数。您将在RunWorkerCompleted事件处理程序上处理异常

存在RunWorkerCompletedEventArgs。错误提示,一旦触发RunWorkerCompleted事件,您就可以获得异常

    private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Error != null)
        { 
            // handle exception here
        }
    }

BackgroundWorker为您捕获异常,但不会向Application.ThreadException或AppDomain.UnhandleException公开,并将异常传递给RunWorkerCompleted事件的参数。您将在RunWorkerCompleted事件处理程序上处理异常

存在RunWorkerCompletedEventArgs。错误提示,一旦触发RunWorkerCompleted事件,您就可以获得异常

    private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Error != null)
        { 
            // handle exception here
        }
    }

这个问题是重复的这个问题是重复的