WPF,如何知道任务已经完成

时间:2017-02-06 15:45:57

标签: wpf events asynchronous task taskcompletionsource

我正在开发一个MVVM WPF应用程序,我有一些任务要做。

  1. 首先加载文件csv并解析它
  2. 在后台不要阻止ui线程并将值保存在数据库中。要将行保存到数据库,我需要使用Async Await Task。
  3. 我的问题是我不知道如何通过弹出通知或其他值已经保存在数据库中的用户注意到用户。

    我的ViewModel

    private void SaveDatasInDatabase()
    {
                ShowLoadingPanel = true;
                _service.SaveValuesInDatabase(rows);
    }
    
    
     private async void startActions()
    {
         await LoadandParseCsv();
         await SaveDatasInDatabase();
    }
    

    在我的Service.cs

    public string SaveDatasInDatabase(List<Object> rows)
    {
       Task.Run(async () =>
        {
                await SaveEntity(rows);
                return "Done";
        });
    }
    

    提前致谢。

    Jolynce

1 个答案:

答案 0 :(得分:1)

您知道在执行startActions()方法的其余部分后,任务已完成:

private async void startActions()
{
    await LoadandParseCsv();
    await SaveDatasInDatabase();

    MessageBox.Show("done");
}

...假设实际等待SaveEntity方法中的SaveDatasInDatabase()方法:

public async Task<string> SaveDatasInDatabase(List<Object> rows)
{
    await SaveEntity(rows);
    return "Done";
}

如果您只是在没有等待退回的Task.Run的情况下致电Task,那么您就不知道它何时结束。

SaveDatasInDatabase方法的返回类型应为TaskTask<T>,以便您能够等待它。同样的事情适用于SaveEntity方法。