Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查异步任务是否从其他线程完成_C#_Wpf_Asynchronous_Mvvm_Task - Fatal编程技术网

C# 检查异步任务是否从其他线程完成

C# 检查异步任务是否从其他线程完成,c#,wpf,asynchronous,mvvm,task,C#,Wpf,Asynchronous,Mvvm,Task,我正在使用异步任务上载文件和更新数据库。我需要知道应用程序何时关闭以更新数据库中的上载状态 我的任务在ViewModel类中 private async void OnUpload(object param) { await Task.Factory.StartNew(() => { try { ... } catch (Exception ex) {

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

我的任务在ViewModel类中

private async void OnUpload(object param)
{
    await Task.Factory.StartNew(() =>
    {
        try
        {
            ...
        }
        catch (Exception ex)
        {
            ...
        }
    }
}
在失败事件中,我应该在主窗口中放置什么

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

    base.OnClosing(e);
}

在类中获取bool变量
IsTaskCompleted
,并将默认值保持为
false
。作为任务的
try
块中的最后一句话,将
IsTaskCompleted
设置为
true


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

就我个人而言,我会使用反应式扩展(RX)和
主题从关闭时发布事件

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

这将使
OnClosing
事件与执行清理的所有订阅服务器分离,并允许您将数据库的清理代码和数据库的繁重代码彼此靠近