这是我在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块中捕获那些异常。
答案 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 是您的异常处理程序方法。