c#继续处理主要处理异常

时间:2012-12-12 13:04:04

标签: c# exception-handling

  

可能重复:
  How do I continue running after an unhandled exception?

我在SO上看过很多类似的问题和问题,但不一样。

我正在处理所有主要未捕获的异常:

在Main中我设置了以下内容:

Application.ThreadException += new ThreadExceptionEventHandler(MainForm_UIThreadException);

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

AppDomain.CurrentDomain.UnhandledException +=
                 new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

Application.Run(new MainForm());

如果我在调试器中运行我的程序,在发生异常并且我在MainForm_UIThreadException或CurrentDomain_UnhandledException中处理它们之后,黄色调试器箭头指向实际发生此异常的行,所以我可以跳过,这意味着(对我而言) )执行上下文不会丢失。

我知道我无法继续执行未处理的异常,但这个esception实际上是在其他地方处理的。

是否可以继续执行当前功能?

谢谢

2 个答案:

答案 0 :(得分:1)

  

你没有。当您收到AppDomain未处理的异常时,您的应用就是   不再处于稳定状态。你究竟要回到哪里?什么时候   你已经达到了这一点,你有充分的理由,唯一的选择就是   出口。您可以合理schedule yourself再次运行以确保   该应用程序回来了,但更好的想法是实际处理   来源的例外,并防止它成为一个   UnhandledException。

来自:How do I continue running after an unhandled exception?

答案 1 :(得分:0)

在WinForms应用程序中,如果要继续运行,则需要在UI事件处理程序中处理异常。

例如:

private void saveButton_Click(object sender, EventArgs e)
{
    try
    {
        ... call BLL to save data
    }
    catch(Exception ex)
    {
        MessageBox.Show("Failed to save data");
    }
}