【问题标题】:Return exception in background worker calling another method在后台工作人员调用另一个方法时返回异常
【发布时间】:2013-11-08 16:03:12
【问题描述】:

在运行另一个方法但该方法也可以在后台工作程序之外运行的后台工作程序中返回异常的最优雅方式是什么?

例如,下面是一个非常简化的示例,其中 SomeMethod() 引发错误。我需要显示错误,如果不在后台工作人员中,这很好,但在某个时候显示它。

private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
  getMethod = SomeMethod();
}

private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{

}

private List<SomeVar> SomeMethod()
{

  try
  {
    throw new DivideByZeroException();
  }
  catch (Exception e)
  {
    //Return Exceptions from here to Worker_RunWorkerCompleted
    //Otherwise show message if not in bgw
    var result = ModernDialog.ShowMessage("Error occurred...." + e.Message, "ErrorTitle", MessageBoxButton.OKCancel);
   }
}

example 展示了如果在 DoWork 方法中引发错误,如何将错误传回,但希望对我的示例中的最佳方法提供一些建议。

理想情况下,我希望能够在后台工作人员内部和外部调用SomeMethod()

【问题讨论】:

    标签: c# exception


    【解决方案1】:

    在这种情况下,由于SomeMethod 不知道它应该如何正确处理异常,所以它根本不应该捕获它。它应该让它冒泡。

    如果它恰好是从 BGW 调用的,那么该工作人员可以获取 e.Error 属性来查看它并适当地处理这种情况。如果其他人调用它,那么他们可以捕获异常并采取适当的行动。

    【讨论】:

      【解决方案2】:

      这是任务成为在 .net 中执行线程的首选方式的原因之一,因为 exception handling + 调度已经融入其中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多