Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# 任务包装同步过程不是';t等待_C#_Wpf_Mvvm_Async Await - Fatal编程技术网

C# 任务包装同步过程不是';t等待

C# 任务包装同步过程不是';t等待,c#,wpf,mvvm,async-await,C#,Wpf,Mvvm,Async Await,我的应用程序WPF MVVM将文件(近10000个文件)加载到一个文件夹中。 ProgressExplorerValue是进度条的值 public async Task ChargeFolderAsync() { IsTaskConversionFinish = false; var rs = await Task.Run(() => LoadEntriesInFolder()); IsTaskConversionFinish = true; Progres

我的应用程序WPF MVVM将文件(近10000个文件)加载到一个文件夹中。
ProgressExplorerValue
是进度条的值

public async Task ChargeFolderAsync()
{
    IsTaskConversionFinish = false;
    var rs = await Task.Run(() => LoadEntriesInFolder());
    IsTaskConversionFinish = true;
    ProgressExplorerValue = 0;
}

public IEnumerable<Record> LoadEntriesInFolder()
 {
     var rs = new List<Record>();
     var di = new DirectoryInfo(InitPath).EnumerateFiles();
     double factorPercent = di.Count() == 0 ? 0 : 100d / di.Count();            

     foreach (var file in di)
     {
         Record rc = new Record()
         {
             MetaName = file.Name,
             MetaPath = file.FullName
         };
         rs.Add(rc);
         ProgressExplorerValue += factorPercent;
     }
     return rs;
 }
public异步任务ChargeFolderAsync()
{
ISTASKCONVERSIONFISH=错误;
var rs=wait Task.Run(()=>LoadEntriesInfo());
ISTASKCONVERSIONFISH=真;
ProgressExplorerValue=0;
}
公共IEnumerable LoadEntriesInfo文件夹()
{
var rs=新列表();
var di=新目录信息(InitPath).EnumerateFiles();
双因素百分比=di.Count()==0?0:100d/di.Count();
foreach(di中的var文件)
{
记录rc=新记录()
{
MetaName=file.Name,
MetaPath=file.FullName
};
rs.Add(rc);
ProgressExplorerValue+=因子百分比;
}
返回rs;
}
await task.Run(()=>LoadEntriesInfo())行中未等待该任务。当我调试时,它从这一行跳到下一行,而方法
LoadEntriesInFolder
尚未完成,因此不会出现盈亏平衡。

执行时
wait Task.Run(()=>LoadEntriesInfo())
等待
Run()的返回值方法,直到任务完成。
试试

Task.Run(()=>LoadEntriesInfo()).Wait()

如何调用ChargeFolderAsync方法?我在program.cs中调用它,如下所示

static void Main(string[] args)
{
    new FileLoader().ChargeFolderAsync().GetAwaiter().GetResult();
    Console.ReadLine();
}
并在异步方法中添加了控制台日志

Console.WriteLine(ProgressExplorerValue);
它给出了这个输出


我想这是您想要的输出。

枚举文件()之后添加
ToList()
。这可能是枚举问题OP似乎在
LoadEntriesInFolder()
方法中迭代
di
。@AntoineV:你是说没有记录添加到
rs
InitPath
是否包含任何内容?@mm8绝对确保InitPath正确,其中包含大量文件it@AntoineV:您是否在调试器中单步执行了
LoadEntriesInfo()
?或者,在
ChargeFolderAsync()
中将
IsTaskConversionFinish
设置为
true
之前,您如何知道它不会返回?未测试,但我认为它不会更改任何内容