【问题标题】:Check completion of async task from a different thread检查来自不同线程的异步任务的完成情况
【发布时间】:2015-05-22 03:16:18
【问题描述】:

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

我的任务在 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);
}

【问题讨论】:

    标签: c# wpf asynchronous mvvm task


    【解决方案1】:

    在你的类中取一个布尔变量IsTaskCompleted,并将默认值保留为false。作为任务的try 块中的最后一条语句,将IsTaskCompleted 设置为true

    在关闭事件处理程序中检查此变量,如果值为false,则表示任务未完成。

    【讨论】:

      【解决方案2】:

      就个人而言,我会使用响应式扩展 (RX) 和 SubjectOnClosing 发布一个事件。

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

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

      【讨论】:

        猜你喜欢
        • 2023-01-17
        • 1970-01-01
        • 2016-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多