我有以下代码
Task load = Task.Factory.StartNew(() =>
{
Threading.Thread.Sleep(5000);
throw new Exception("bad error");
});
try{
load.Wait();
}catch(AggregateException aex){
MessageBox.Show("Error Caught!");
}
在这里,您可以看到,我创建了一个任务并抛出异常。 然后在UI线程上捕获异常。但是通过这个设置,UI将无法响应。
有什么方法可以让UI响应并捕获异常?
答案 0 :(得分:3)
有几种方法可以解决这个问题。
你可以使用ContinueWith
并在那里查看,或者你可以加入global task exception handler TaskScheduler.UnobservedTaskException)。 (详细信息)
ContinueWith仅用于异常处理:
load.ContinueWith(previousTask =>
{
//exception message here
}, TaskContinuationOptions.OnlyOnFaulted);
或正常尝试捕获:
load.ContinueWith(previousTask =>
{
try
{
previousTask.Result
}
catch(Exception ex){//message here}
});
答案 1 :(得分:1)
您需要为任务添加续集,而不是使用Wait
或任何其他阻止任务的方法。
load.ContinueWith(t => MessageBox.Show(t.Exception.Message)
, TaskContinuationOptions.OnlyOnFaulted);