【发布时间】:2013-04-16 08:23:32
【问题描述】:
我有一个从数据库获取产品的任务,以及操作一些 UI 修改的 ContinueWith 操作,因此我遇到了问题,因为任务创建了一个新线程,并且 UI 修改不是在 UI 线程中执行的。
我尝试使用此修复:
var currentScheduler = TaskScheduler.Current;
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), currentScheduler);
但它根本不起作用。我检查了一下,ContinueWith 没有在 currentScheduler 的线程中执行,而是在另一个线程中执行。
我发现了这个方法:
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), TaskScheduler.FromCurrentSynchronizationContext());
它有效。那么有什么区别呢?为什么我的第一个代码不起作用? 谢谢!
【问题讨论】: