我有一个WPF应用程序,其中使用System.Threading.Tasks进行长时间运行的WCF调用。我通过添加处理程序到Application.Current.DispatcherUnhandledException来捕获未处理的异常。
我创建了一个任务,其中继续使用以下代码在UI线程上运行:
var task = new Task<T>(func).ContinueWith(t =>
{
if (t.IsFaulted)
{
throw t.Exception.GetBaseException();
}
else
{
// Show t.Result on UI
}
}, TaskScheduler.FromCurrentSynchronizationContext());
当任务发生异常时,我希望重新抛出异常,以便DispatcherUnhandledException处理程序可以处理异常。但是当我重新抛出异常时(如上所示),它会使我的应用程序崩溃,并且DispatcherUnhandledException不会被调用。
我该如何在UI线程上重新抛出异常,以便触发DispatcherUnhandledException处理程序?
当我使用BackgroundWorker时,重新抛出异常就可以达到这个效果。基本上,我想用Task替换BackgroundWorker,因为Task有一些很好的功能,我想要利用它们。