我有一个任务是从数据库获取产品,并使用ContinueWith
动作进行一些界面修改,因此我遇到了问题,因为该任务创建了一个新的线程,而UI修改并未在UI线程中执行。
我尝试使用以下修复方法:
var currentScheduler = TaskScheduler.Current;
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), currentScheduler);
但它根本没起作用。我检查了,ContinueWith
没有在当前调度程序的线程中执行,而是在另一个线程中执行。
我发现了这种方法:
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), TaskScheduler.FromCurrentSynchronizationContext());
它起作用了。那么有什么区别呢?为什么我的第一段代码不起作用呢?谢谢!