【问题标题】:Throwing an exception from a BackgroundWorker which calls an async. method (Webrequest)从调用异步的 BackgroundWorker 中引发异常。方法(网络请求)
【发布时间】:2011-02-06 05:55:00
【问题描述】:
  • 我的主应用程序创建了一个新的 BackgroundWorker X
  • X 的 DoWork 事件处理程序调用我的控制器的方法 Y。此方法使用 AsyncCallback 创建 WebRequest (async.) 实例和回调。
  • 当响应到达时,将调用回调方法 Z 并分析内容。响应可能包含不需要的内容。此时回调 Z 会抛出异常。

我想在我的主应用程序中捕获这个异常。 我在 DoWork 和 RunWorkerCompleted 中尝试过,但从那里无法捕捉到任何东西。

RunWorkerCompletedEventArgs 中的错误始终为 null。

【问题讨论】:

  • 那么解决办法是什么?

标签: c# exception backgroundworker webrequest asynccallback


【解决方案1】:

不知道你做错了什么。但这就像魅力一样。

        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += (o, s) => { throw new Exception("myMessage"); };
        bw.RunWorkerCompleted += (o, s) => { Console.WriteLine(s.Error.Message); };
        bw.RunWorkerAsync();
        Console.ReadKey(true);

所以这意味着您的异常必须在某个地方被捕获,因此无法传播到 BWWorkCompletedEventArgs

【讨论】:

  • 我的异常是从一个异步调用的方法(事件处理程序)中抛出的。也许这就是原因?!?!?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2013-12-10
相关资源
最近更新 更多