我正在使用Tasks在ViewModel中运行长时间运行的服务器调用,并且使用Dispatcher将结果整理回TaskScheduler.FromSyncronizationContext()上。例如:

var context = TaskScheduler.FromCurrentSynchronizationContext();
this.Message = "Loading...";
Task task = Task.Factory.StartNew(() => { ... })
            .ContinueWith(x => this.Message = "Completed"
                          , context);

当我执行应用程序时,这工作正常。但是,当我在NUnit上运行Resharper测试时,我在调用FromCurrentSynchronizationContext时收到以下错误消息:



我猜这是因为测试是在工作线程上运行的。如何确保测试在主线程上运行?任何其他建议,欢迎。

最佳答案

您需要提供一个SynchronizationContext。这是我的处理方式:

[SetUp]
public void TestSetUp()
{
  SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
}

关于c# - 当前的SynchronizationContext不能用作TaskScheduler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8245926/

10-09 14:50