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
{
}
}
Ошибки в BackgroundWorker
MSDN все написано просто - все ошибки внутри асинхронной операции будут фиксироваться в методе, вызываемом по событию RunWorkerCompleted в аргументе типа RunWorkerCompletedEventArgs, свойство Error.
Но что-то у меня не получается. Примерный код:
Вот как мне попасть в ветку (e.Error != null)?
Или, если вопрос некорректный, как обрабатывать исключения в асинхронной операции, выводя ошибки на уровень выше, возвращаясь в основную нить?
На
Но что-то у меня не получается. Примерный код:
Код:
Вот как мне попасть в ветку (e.Error != null)?
Или, если вопрос некорректный, как обрабатывать исключения в асинхронной операции, выводя ошибки на уровень выше, возвращаясь в основную нить?
И что же, не работает? :rolleyes:
Цитата: hardcase
И что же, не работает? :rolleyes:
Сам в шоке! Мимо проверки (e.Error != null) проходит так, будто её и нет :(
При этом дебаггер в студии останавливается на строчке throw new AppEx; , сообщая о том, что у меня выпало необрабатываемое исключение
Цитата: Cybernetic
Сам в шоке! Мимо проверки (e.Error != null) проходит так, будто её и нет :(
При этом дебаггер в студии останавливается на строчке throw new AppEx; , сообщая о том, что у меня выпало необрабатываемое исключение
При этом дебаггер в студии останавливается на строчке throw new AppEx; , сообщая о том, что у меня выпало необрабатываемое исключение
Отладчик и должен отстанавливаться на throw - это его прямая обязанность.
Возобнови выполнение после этого останова и все встанет на места.
Цитата: hardcase
Отладчик и должен отстанавливаться на throw - это его прямая обязанность.
Возобнови выполнение после этого останова и все встанет на места.
Возобнови выполнение после этого останова и все встанет на места.
Блин, я вот до этого допехал за пару минут до твоего ответа :)
Меня испугало, что студия останавливается на эксепшне, обычно она это делала на неуправляемых экспшнах, а этот я считал управляемым, ибо везде написано, что BackgroundWorker обрабатывает исключения)
Спасибо, извиняйте за лишнюю панику :rolleyes:
И что же, не работает?
Цитата: ailun86
И что же, не работает?
Работает, работает) Паника была напрасной.