【问题标题】:WPF , howto to know that a task has completedWPF,如何知道任务已经完成
【发布时间】:2017-02-06 15:45:57
【问题描述】:

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

  1. 首先加载文件 csv 并解析它
  2. 在后台不要阻塞 ui 线程并将值保存在数据库中。要将行保存到数据库中,我需要使用 Async Await Task。

我的问题是我不知道如何通过弹出通知或其他已经保存在数据库中的值来通知用户。

在我的视图模型中

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";
    });
}

提前致谢。

乔林斯

【问题讨论】:

    标签: wpf events asynchronous task taskcompletionsource


    【解决方案1】:

    你知道一旦startActions()方法的剩余部分被执行,任务就完成了:

    private async void startActions()
    {
        await LoadandParseCsv();
        await SaveDatasInDatabase();
    
        MessageBox.Show("done");
    }
    

    ...前提是实际在SaveDatasInDatabase()方法中等待SaveEntity方法:

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

    如果你只是调用Task.Run而不等待返回的Task,你不知道它什么时候结束。

    SaveDatasInDatabase 方法的返回类型应该是Task 或Task&lt;T&gt; 以便您能够等待它。 SaveEntity 方法也是如此。

    【讨论】:

    • 谢谢mm8。我会试试你的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2020-02-06
    • 2012-03-06
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多