Я использую следующие
Task.Factory.StartNew(() => DoPrintConfigPage(serial));
то функция, которую я вызываю, выглядит так:
private void DoPrintConfigPage(string serial)
{
//do printing work
}
Моя проблема заключается в том, что исключение вызывается внутри потока и не обрабатывается.
Я попробовал обернуть его в try catch
try
{
Task.Factory.StartNew(() => DoPrintConfigPage(serial));
}
catch (Exception ex) { }
но он все еще не поймает ошибку и, таким образом, сбой приложения.
Как я могу поймать исключения в основном потоке, чтобы я мог их обработать?
Update
Я внес изменения, рекомендованные ниже, и все же он говорит, что исключение необработанное
var task = Task.Factory.StartNew(() => DoPrintConfigPage(serial))
.ContinueWith(tsk =>
{
MessageBox.Show("something broke");
},TaskContinuationOptions.OnlyOnFaulted);
то в моем DoConfigPage
я добавил еще одну попытку.
В этом уловке теперь происходит сбой и говорят, что исключенное исключение было необработанным, что мне не хватает?
private void DoPrintConfigPage(string serial)
{
try
{
//call the print function
}
catch (Exception ex)
{
throw ex; //it is crashing here and saying it is unhandled
}
}
Я также пробовал то, что предложил Эрик Дж. с теми же результатами
var task = Task.Factory.StartNew(() => DoPrintConfigPage(serial));
try
{
task.Wait();
}
catch (AggregateException ex) { MessageBox.Show("something broke"); }