Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибки в BackgroundWorker

10K
26 октября 2010 года
Cybernetic
106 / / 22.07.2009
На MSDN все написано просто - все ошибки внутри асинхронной операции будут фиксироваться в методе, вызываемом по событию RunWorkerCompleted в аргументе типа RunWorkerCompletedEventArgs, свойство Error.

Но что-то у меня не получается. Примерный код:

Код:
public void Method()
{
        BackgroundWorker worker= new BackgroundWorker
        {
          WorkerReportsProgress = true,
          WorkerSupportsCancellation = true
        };

        worker.DoWork += worker_DoWork;
        worker.RunWorkerCompleted += worker_RunAsyncComplited;
        worker.ProgressChanged += _parentForm.ProgressChanged;

        worker.RunWorkerAsync();
}

private void worker_DoWork(object sender, DoWorkEventArgs e)
{
        throw new ApplicationException("MyError");
}

private void worker_RunAsyncComplited(object sender, RunWorkerCompletedEventArgs e)
{
        if (e.Error != null)
        {
          MessageBox.Show(e.Error.Message, "Ошибка");
        }

        if (e.Cancelled)
        {
        }
        else
        {
        }
}


Вот как мне попасть в ветку (e.Error != null)?

Или, если вопрос некорректный, как обрабатывать исключения в асинхронной операции, выводя ошибки на уровень выше, возвращаясь в основную нить?
5
26 октября 2010 года
hardcase
4.5K / / 09.08.2005
И что же, не работает? :rolleyes:
10K
27 октября 2010 года
Cybernetic
106 / / 22.07.2009
Цитата: hardcase
И что же, не работает? :rolleyes:



Сам в шоке! Мимо проверки (e.Error != null) проходит так, будто её и нет :(
При этом дебаггер в студии останавливается на строчке throw new AppEx; , сообщая о том, что у меня выпало необрабатываемое исключение

5
27 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Cybernetic
Сам в шоке! Мимо проверки (e.Error != null) проходит так, будто её и нет :(
При этом дебаггер в студии останавливается на строчке throw new AppEx; , сообщая о том, что у меня выпало необрабатываемое исключение



Отладчик и должен отстанавливаться на throw - это его прямая обязанность.
Возобнови выполнение после этого останова и все встанет на места.

10K
27 октября 2010 года
Cybernetic
106 / / 22.07.2009
Цитата: hardcase
Отладчик и должен отстанавливаться на throw - это его прямая обязанность.
Возобнови выполнение после этого останова и все встанет на места.



Блин, я вот до этого допехал за пару минут до твоего ответа :)

Меня испугало, что студия останавливается на эксепшне, обычно она это делала на неуправляемых экспшнах, а этот я считал управляемым, ибо везде написано, что BackgroundWorker обрабатывает исключения)

Спасибо, извиняйте за лишнюю панику :rolleyes:

65K
18 ноября 2010 года
ailun86
4 / / 18.11.2010
И что же, не работает?
10K
18 ноября 2010 года
Cybernetic
106 / / 22.07.2009
Цитата: ailun86
И что же, не работает?



Работает, работает) Паника была напрасной.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог