我的应用程序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;
}
await Task.Run(() => LoadEntriesInFolder());
行不等待任务。当我调试时,即使方法LoadEntriesInFolder
尚未完成,它也可以从该行跳至下一行而不会中断。
答案 0 :(得分:0)
您如何调用ChargeFolderAsync方法?我在如下的program.cs中称呼它。
static void Main(string[] args)
{
new FileLoader().ChargeFolderAsync().GetAwaiter().GetResult();
Console.ReadLine();
}
并在您的异步方法中添加了控制台日志。
Console.WriteLine(ProgressExplorerValue);
它给出了这个输出。
我认为这是您想要的输出。
答案 1 :(得分:-5)
这样做的时候
await Task.Run(() => LoadEntriesInFolder());
您正在等待Run();
方法的返回值,直到任务完成。
试试
Task.Run(() => LoadEntriesInFolder()).Wait();