从另一个线程检查异步任务的完成情况

时间:2015-05-22 03:16:18

标签: c# wpf asynchronous mvvm task

我正在使用异步任务来上传文件和更新数据库。我需要知道应用程序何时关闭以更新数据库中的上传状态。

我的任务是在ViewModel类中。

private async void OnUpload(object param)
{
    await Task.Factory.StartNew(() =>
    {
        try
        {
            ...
        }
        catch (Exception ex)
        {
            ...
        }
    }
}

我应该在MainWindow OnClosing事件中加入什么?

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    ....

    base.OnClosing(e);
}

2 个答案:

答案 0 :(得分:1)

在您的班级中取一个bool变量IsTaskCompleted,并将默认值保持为false。作为任务try区块中的最后一条语句,请将IsTaskCompleted设置为true

在结束事件处理程序中检查此变量,如果值为false,则意味着任务尚未完成。

答案 1 :(得分:1)

就个人而言,我使用Reactive Extensions(RX)和OnClosingSubject发布了一个事件。

我需要它的程序中的任何地方,我都订阅该事件并执行任何清理。

这会将OnClosing事件与执行清理的所有订阅者分离,并允许您将数据库的清理代码和数据库的繁重代码放在彼此靠近的位置。