异步更新绑定值

时间:2014-10-08 07:59:03

标签: c# .net wpf asynchronous async-await

我在WPF项目中有以下异步方法:

private async void RecalculateRun(Guid run_number)
{
    // kick off the Full recalculation
    //
    await FullRecalcAsync(run_number);

    // When thats done, asyncronously kick off a refresh
    //
    Task RefreshTask = new Task(() => RefreshResults());
    await RefreshTask;      
}

第一个await执行大量计算,第二个执行结果并更新一些绑定变量。我没想到UI会在第二个await期间更新,但我希望它在完成时能够这样做。当然,这不会发生。另外,我想指出,如果我在第一个RefreshTask之后同步拨打await,那么它可以正常工作。

1 个答案:

答案 0 :(得分:3)

您在不启动任务的情况下创建任务。您需要致电Start

Task RefreshTask = new Task(() => RefreshResults());
RefreshTask.Start();
await RefreshTask;

或者最好不要使用Task.Run

await Task.Run(() => RefreshResults());

通常不鼓励直接使用Task构造函数:

  

一般情况下,我总是建议使用Task.Factory.StartNew,除非特定情况提供了使用构造函数后跟Start的令人信服的理由。我推荐这个有几个原因。首先,它通常更有效率

来自"Task.Factory.StartNew" vs "new Task(...).Start"