在后台工作程序中调用另一个方法返回异

时间:2013-11-08 16:03:12

标签: c# exception

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

例如,下面是一个非常简化的示例,其中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()

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

这是任务成为最重要的原因之一,因为在{。{3}} +日程安排中,在.net中执行线程化的首选方式。