如何统一处理BackgroundWork产生的异常

melongirl 2013-04-18 09:00:10
场景是这样的:

我想在某个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类中处理。

请问大家有什么看法,是否能帮帮我。
...全文
407 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LADYGAGA_XB 2013-05-17
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.threadexception.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2 也可以看看这个.
LADYGAGA_XB 2013-05-17
  • 打赏
  • 举报
回复
可以在RunWorkerCompleted的e.Error中处理DoWork中出现的异常;
melongirl 2013-04-19
  • 打赏
  • 举报
回复
我已经在StackOverflow上找到答案了,大家可能没有弄明白我的意思,还是谢谢你们了。 答案: http://stackoverflow.com/questions/16084155/how-to-handle-the-exception-of-backgroundworker-in-the-main-process
  • 打赏
  • 举报
回复
C#157个建议中有描述。 线程的异常必须自己处理,主线程不会处理。
  • 打赏
  • 举报
回复
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来设置。

111,076

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧