我使用以下代码来处理程序中所有未处理的异常。但问题是异常没有传播到指定的方法。
[STAThread]
static void Main()
{
AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Handler for unhandled exceptions.
currentDomain.UnhandledException += GlobalUnhandledExceptionHandler;
// Handler for exceptions in threads behind forms.
System.Windows.Forms.Application.ThreadException += GlobalThreadExceptionHandler;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.Message,
"Important",
MessageBoxButtons.YesNo);
}
private static void GlobalThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Exception ex = e.Exception;
MessageBox.Show(ex.Message,
"Important",
MessageBoxButtons.YesNo);
}
FormMain 有一个backgroundWorker 对象。这个后台工作者负责应用程序的大部分工作,如果 doWork 方法中有异常,它不会像我期望的那样传播..
这是我在 MainForm 中使用的后台工作程序的代码。
private void button_startSync_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(getSettings());\
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// ... processing code
// Unhandled Exception will generated in this method...
}
请告知我在这里做错了什么,我希望程序中任何地方生成的异常被捕获到上面的全局处理程序中,以便将错误/异常报告回来以进行修复。
Thanks,
这是设计使然,BackgroundWorker 类捕获 DoWork 事件处理程序内部引发的任何异常。并在 RunWorkerCompleted 事件处理程序的 e.Error 属性中公开它。所以这样写:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
{
if (e.Error != null) throw e.Error;
// etc..
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)