我一直在尝试关注此MSDN example,并使用以下代码。但是,即使在SomeMethod()中发生错误,e.Error
在RunWorkerCompleted中始终为null;
private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
getMethod = SomeMethod();
}
private void Worker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
var result = ModernDialog.ShowMessage("Error occurred.... " +
e.Result, "ErrorTitle", MessageBoxButton.OK);
}
else if (e.Cancelled)
{
}
Else
{
}
}
谁能看到我做错了什么?
我可以通过执行以下操作来解决这个问题,但我真的不明白为什么MSDN中的示例对我不起作用?
private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
try
{
getMethod = SomeMethod();
}
catch(Exception ex)
{
e.Result = ex;
}
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result is Exception)
{
var result = ModernDialog.ShowMessage("Error occurred.... " + e.Result, "ErrorTitle", MessageBoxButton.OK);
}
//etc
}
另外,使用第二种方法我无法从e.Result访问.Message。例如,在WorkerDoWork中,我可以使用ex.Message
编辑:我已经设置了工作者来创建它自己的错误,我仍然得到e.Error == null。显示的变量有点模糊,因为CTRL + PrtSc使其淡入淡出
答案 0 :(得分:3)
我认为问题是emailWorkerDoWork()
中的空异常块。如果结果是异常,则无法捕获后台工作程序中的异常。
所以这样的事情会给你想要的结果:
private void emailWorkerDoWork(object sender, DoWorkEventArgs e)
{
int value = 1 / int.Parse("0");
}
我发现另一个SO答案证实了我的怀疑,并提供了MSFT参考here。