C# Task.Factory.StartNew thowing异常

C# Task.Factory.StartNew thowing异常,c#,wpf,C#,Wpf,我正在使用Task.Factory.StartNew对UI线程进行长处理服务调用。但是,一旦加载应用程序,我就会收到以下异常 通过等待任务或访问其exception属性,未观察到任务的异常。结果,终结器线程重新处理了未处理的异常 Task.Factory.StartNew(() => this.InitializeViewModel(myViewModel)); private void InitializeViewModel(IModel myViewModel) { lock

我正在使用Task.Factory.StartNew对UI线程进行长处理服务调用。但是,一旦加载应用程序,我就会收到以下异常

通过等待任务或访问其exception属性,未观察到任务的异常。结果,终结器线程重新处理了未处理的异常

Task.Factory.StartNew(() => this.InitializeViewModel(myViewModel));

private void InitializeViewModel(IModel myViewModel)
{
    lock (viewModelLock)
    {
        myViewModel.MyContext = this.MyContext; // this will set the MyContext property which in turn makes some service calss
    }
}
在这里,我不能使用task.wait()b'z,因为它会导致UI线程上的等待

我怎样才能避免这个例外


谢谢。

作为第一个解决方法/调试帮助,请将
锁(…)
包装在
try catch
内,并在
catch
块内设置断点-这样您应该能够看到问题

要解决
任务的问题,请稍候
-您可以使用该方法获取异常:

var task = Task.Factory.StartNew(() => this.InitializeViewModel(myViewModel));
task.ContinueWith(o => MyErrorHandler(task.Exception), TaskContinuationOptions.OnlyOnFaulted);
不要忘记处理程序:

void MyErrorHandler(Exception error)
{
 // handle the exception (log, or whatever)
}

调用
Task.Factory.StartNew
的位置在哪里?您应该查看该异常的
innerException
,并修复它,而不是试图忽略它。我使用的是ContinueWith,它没有抛出错误,这是正确的处理方法吗,或者我应该写一些不会引发异常的东西吗..请指导我使用类似这样的东西来记录意外错误,是的,我认为这是正确处理错误的一种方法-当然,您应该编写代码来处理错误