1

我一直在尝试遵循这个 MSDN示例,并使用下面的代码。但是,e.Error即使在 SomeMethod() 中确实发生错误,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 使其消失 在此处输入图像描述

4

1 回答 1

3

我认为问题是您在emailWorkerDoWork(). 要使结果成为异常,您无法在后台工作人员中捕获异常。

所以这样的事情应该会给你想要的结果:

private void emailWorkerDoWork(object sender, DoWorkEventArgs e)
{
    int value = 1 / int.Parse("0");
}

我找到了另一个 SO 答案,证实了我的怀疑,并在此处提供了 MSFT 参考。

于 2013-11-08T21:46:25.667 回答