2009-07-29 2 views
0

Можно ли исключить исключение из события Completed действия Async?Выброс исключения из AsyncCompletedEvent

Моя ситуация в том, что я использую класс WebClient и выполняю загрузку async. Если ошибка встречается, я могу получить ее через AsyncCompletedEventArgs события WebClient.DownloadFileCompleted.

Однако то, что я действительно хочу сделать, затем выкидывает это исключение дальше по стеку в другие области кода, которые ждут завершения этой загрузки, поэтому средствам сообщения об ошибке обратно пользователю не требуется управляться вниз на низком уровне.

Кто-нибудь знает, если/как это сделать? В настоящее время я получаю UnhandledException, потому что событие, очевидно, вызывается из внешнего кода.

ответ

2

Если вы используете async, тогда другой код обычно не активно (или даже пассивно) ждет завершения. Обратный вызов происходит в отдельном потоке, поэтому нет; вы не можете действительно поднять ошибку и прервать свой основной поток (ы).

Вам нужно будет установить флаг, чтобы произошло что-то плохое (возможно, включая экземпляр исключения) - и пусть другой код запрашивает его при его выборе (хотя вы можете коснуться экрана gate/mutex/monitor, чтобы уведомить об этом другой поток). Этот подход частично используется подходом BackgroundWorker, где исходный поток (когда он уведомлен) может получить исключение.

+0

спасибо Марк. Это метод, который я принял в конце. – Ian

1

Если у вас есть статическая ссылка на диспетчерский, другой вариант, чтобы поднять исключение в потоке пользовательского интерфейса:

Dispatcher.BeginInvoke(() => { throw new Exception("Example"); }); 
Смежные вопросы