如何使用 TaskScheduler.FromCurrentSynchronizationContext() 来解决后台



这是我问题的一个小例子,我无法从关于同一错误的其他问题中解决它。

UI 线程通过具有以下行的按钮单击调用函数:

await DataSet.AddFileAsync(String.Format("ms-appdata:///local/IMM_FACE_DB/{0}", file.Name));

AddFileAsync 如下所示:

public ObservableCollection<Model> Data {get;set;}
public Task AddFileAsync(string path)
{
     return Task.Factory.StartNew((state) =>
     {
         // Here some IO and computation is done, eventually some content is added 
         // to Data. Data is also bound to a GridView and this fails.
         //I assumed that TaskScheduler.FromCurrentSynchronizationContext()
         // would solve this, but it does not.
     }, TaskScheduler.FromCurrentSynchronizationContext());
} 

正如我在上面的代码中所写,我假设任务计划程序可以确保它在 UI 线程上运行。由于 AddFileAsync 是从数据绑定按钮单击命令调用的。

我在哪里误解了什么? 以及这样做的正确等待是什么。

我可以看到StartNew没有必要...

public async Task AddFileAsync(string path)
{
  // Do some IO
  var ioResult = await DoIoAsync(path);
  // Do some computation
  var computationResult = await Task.Run(() => DoComputation(ioResult));
  // Update Data
  Data.Add(computationResult);
} 

相关内容

  • 没有找到相关文章

最新更新