从AsyncCompletedEvent抛出异常

时间:2009-07-29 13:48:16

标签: c# exception

是否可以从Async操作的Completed事件中抛出异常?

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

然而,我真正想做的是,然后将此Exception从堆栈中进一步推送到等待此下载完成的其他代码区域,因此将错误报告给用户的方法不一定是管理得很低。

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

2 个答案:

答案 0 :(得分:2)

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

你需要设置一个标志,表明发生了一些不好的事情(可能包括异常实例) - 让其他代码在选择时查询它(尽管你可能会触摸一个gate / mutex / monitor来帮助通知另一个线程) 。这种方法部分由BackgroundWorker方法完成,其中原始线程(通知时)可以获取异常。

答案 1 :(得分:1)

假设您有一个对Dispatcher的静态引用,另一个选项是在UI线程上引发异常:

Dispatcher.BeginInvoke(() => { throw new Exception("Example"); });
相关问题