【发布时间】:2019-04-09 22:19:30
【问题描述】:
我的应用程序 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 尚未完成。
【问题讨论】:
-
在
EnumerateFiles()之后添加ToList()。这可能是枚举问题 -
OP 似乎在
LoadEntriesInFolder()方法中迭代di。 -
@AntoineV:你是说
rs没有添加记录?InitPath是否包含任何内容? -
@mm8 绝对确定 InitPath 正确,里面有很多文件
-
@AntoineV:你有没有在调试器中通过
LoadEntriesInFolder()?或者你怎么知道在IsTaskConversionFinish在ChargeFolderAsync()中设置为true之前它不会返回?
标签: c# wpf mvvm async-await