我正在尝试读取超过100k +文件的目录的内容。最终将解析每个文件。由于这是一项耗时很长的任务,我想向最终用户提供程序没有"冻结"的反馈,这是一个MVP模式项目设置。
我正在使用异步任务和IProgress向UI提供反馈,但是下面的任何一种方法都会锁定用户界面,我无法弄清楚为什么......
httpie
这会更新用户界面
private async void MainFormViewOnStartProcessingFiles(object sender, EventArgs eventArgs)
{
// The Progress<T> constructor captures our UI context,
// so the lambda will be run on the UI thread.
var asyncProgress = new Progress<int>(percent =>
{
EventAggregator.Instance.Publish(new DisplayMainFormWaitBarMessage($"Async found {percent} files..."));
});
// GetDirectoryFiles is run in the thread pool
await Task.Run(() => GetDirectoryFilesAsync(asyncProgress));
var syncProgress = new Progress<int>(percent =>
{
EventAggregator.Instance.Publish(new DisplayMainFormWaitBarMessage($"Sync found {percent} files..."));
});
GetDirectoryFiles(syncProgress);
}
这是我的异步和非异步代码,用于将文件读入队列
private void DisplayWaitingBarMessage(DisplayMainFormWaitBarMessage obj)
{
_mainFormView.DisplayWaitBarMessage(obj.DisplayText);
}