C# 从另一个线程捕获Application.ThreadException中的错误
我有一个windows from应用程序,其program.cs代码如下: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();
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
}
}
这个问题是重复的这个问题是重复的