私は以下を使用しています
Task.Factory.StartNew(() => DoPrintConfigPage(serial));
次に、私が呼び出している関数は次のようになります
private void DoPrintConfigPage(string serial)
{
//do printing work
}
私の問題は、例外がスレッド内にスローされ、処理されないことです。
トライキャッチで包んでみました
try
{
Task.Factory.StartNew(() => DoPrintConfigPage(serial));
}
catch (Exception ex) { }
しかし、それでもエラーをキャッチしていないため、アプリケーションがクラッシュします。
メインスレッドで例外をキャッチして処理できるようにするにはどうすればよいですか?
アップデート
以下に推奨する変更を加えましたが、それでも例外は処理されないと言っています
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
}
}
エリックJ.が提案したものも試してみましたが、同じ結果になりました
var task = Task.Factory.StartNew(() => DoPrintConfigPage(serial));
try
{
task.Wait();
}
catch (AggregateException ex) { MessageBox.Show("something broke"); }