2009-07-29 63 views
0

是否有可能从异步操作的Completed事件中抛出异常?从AsyncCompletedEvent抛出异常

我的情况是,我正在使用WebClient类并执行异步下载。如果遇到错误,那么我可以通过WebClient.DownloadFileCompleted事件的AsyncCompletedEventArgs来检索它。

然而,我真正想要做的是,将这个异常进一步向堆栈上方等待此下载完成的其他代码区域发送,因此将错误报告给用户的方法不必将其管理在较低水平。

有谁知道如果/如何做到这一点?目前我得到一个UnhandledException,因为这个事件显然是从外部代码中调用的。

回答

2

如果您使用的是异步,那么其他代码通常不会主动(甚至被动)等待完成。回调发生在一个单独的线程,所以没有;你不能真正提出错误并让它中断你的主线程。

您需要设置一个标志,指出发生了什么不愉快的事情(可能包括异常实例) - 让其他代码在选择时查询它(尽管您可能会触摸gate/mutex/monitor来帮助通知其他线程)。这种方法部分通过BackgroundWorker方法完成,其中始发线程(通知时)可以接收异常。

+0

感谢马克。这是我最后采用的方法。 – Ian 2009-07-29 15:42:43

1

假设你有一个静态参考调度,另一种选择是提高UI线程上的异常:

Dispatcher.BeginInvoke(() => { throw new Exception("Example"); });