C#UserControl构造函数不会按预期抛出异常

时间:2018-07-01 17:04:15

标签: c# .net constructor exception-handling user-controls

这是我在Program.cs中的WinForm解决方案入口点:

try
{
  Application.Run(new MainForm());
}
catch (Exception e)
{
  Log.error(e.ToString());
  ErrorHandlerForm abend = new ErrorHandlerForm(e);
  abend.ShowDialog();
}

一切正常,解决方案中抛出的每个异常都得到了妥善处理!

但是今天我发现了一个问题:

我的程序没有捕获UserControls委托人中发生的异常!

它只是在丑陋的系统提示下崩溃到Windows(或者如果我处于调试模式,它将在Visual Studio中显示错误)。

我不了解这种行为,也不知道如何解决,我想在我的catch块中捕获那些异常。

1 个答案:

答案 0 :(得分:0)

This答案试图解释潜在的问题。

只需在您的主要方法中添加以下几行:

Spinner

并使用此方法来处理异常:

//Add the event handler for handling all unhandled UI thread exceptions to the event Application_ThreadException
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);

处理所有未明确捕获的非UI异常也是一个好主意。只需添加以下内容:

/// <summary>
/// Handles all unhandled UI thread exceptions
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Threading.ThreadExceptionEventArgs"/> instance containing the event data.</param>
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
    //handle e.Exception here
}

其中 CurrentDomain_UnhandledException 是您的异常处理程序方法。