Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
WPF如何使用任务处理正在运行的操作_Wpf_Task - Fatal编程技术网

WPF如何使用任务处理正在运行的操作

WPF如何使用任务处理正在运行的操作,wpf,task,Wpf,Task,我有一个检查目录是否存在的方法 public static bool FileExists(string path, int timeout = 500) { Func<bool> func = () => File.Exists(path); using (Task<bool> task = new Task<bool>(func)) { task.Start(); return task.Wai

我有一个检查目录是否存在的方法

public static bool FileExists(string path, int timeout = 500)
{
    Func<bool> func = () => File.Exists(path);
    using (Task<bool> task = new Task<bool>(func))
    {
        task.Start();
        return task.Wait(timeout) && task.Result;
    }
}
公共静态bool文件存在(字符串路径,int timeout=500)
{
Func Func=()=>File.Exists(路径);
使用(任务=新任务(func))
{
task.Start();
返回task.Wait(超时)&&task.Result;
}
}
它工作正常,但当我关闭wpf应用程序时,有时会出现以下异常:

仅当任务处于完成状态(RanToCompletion、Faulted或Canceled)时,才可以处理该任务


有关于如何检测异常的提示吗?我试图将代码包装到try…catch块中,但我认为还有更多的元素和解决方案,

有一个超负荷的
Wait
方法接受
CancellationToken
。如果使用此选项,则可以使用
CancellationTokenSource
来取消它,如中所述

不过,您实际上不需要处理该任务:

public static bool FileExists(string path, int timeout = 500)
{
    Func<bool> func = () => File.Exists(path);
    Task<bool> task = Task.Run(func);
    return task.Wait(timeout) && task.Result;
}
公共静态bool文件存在(字符串路径,int timeout=500)
{
Func Func=()=>File.Exists(路径);
Task=Task.Run(func);
返回task.Wait(超时)&&task.Result;
}
Stephan Toub在他的博客文章中对此做了更多解释:


有一个重载
Wait
方法接受一个
CancellationToken
。如果使用此选项,则可以使用
CancellationTokenSource
来取消它,如中所述

不过,您实际上不需要处理该任务:

public static bool FileExists(string path, int timeout = 500)
{
    Func<bool> func = () => File.Exists(path);
    Task<bool> task = Task.Run(func);
    return task.Wait(timeout) && task.Result;
}
公共静态bool文件存在(字符串路径,int timeout=500)
{
Func Func=()=>File.Exists(路径);
Task=Task.Run(func);
返回task.Wait(超时)&&task.Result;
}
Stephan Toub在他的博客文章中对此做了更多解释: