Генерация исключения из BackgroundWorker, который вызывает async. метод (веб-запрос)

  • Мое основное приложение создает новый BackgroundWorker X
  • обработчик событий DoWork X вызывает метод Y моего контроллера. Этот метод создает экземпляр WebRequest (асинхронный) и обратный вызов с помощью AsyncCallback.
  • Когда приходит ответ, вызывается метод обратного вызова Z, и содержимое будет проанализировано. Может случиться так, что ответ имеет нежелательное содержание. В этот момент обратный вызов Z вызовет исключение.

Я хочу поймать это исключение в своем основном приложении. Пробовал в DoWork и RunWorkerCompleted, но оттуда ничего не поймать.

Ошибка в RunWorkerCompletedEventArgs всегда равна нулю.


person mrbamboo    schedule 09.04.2010    source источник
comment
Итак, каково решение?   -  person Eugeniu Torica    schedule 13.06.2011


Ответы (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.

person Danthar    schedule 09.04.2010
comment
Мое исключение выдается из метода, который вызывается асинхронно (обработчик событий). Может в этом причина?!?!? - person mrbamboo; 11.04.2010