我有一个从数据库获取产品的任务,以及ContinueWith
操作一些 UI 修改的操作,因此我遇到了问题,因为任务创建了一个新线程,并且 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());
它有效。那么有什么区别呢?为什么我的第一个代码不起作用?谢谢!