【发布时间】:2021-07-19 17:04:51
【问题描述】:
我有一个后台线程有一个长时间运行的任务。
后台线程根据给定的过滤器搜索文件。 该任务可能运行很长时间,所以我不想等待任务完成才能显示一些结果。
此外,我不想锁定我的 UI 线程以检查后台任务是否有新结果。
我宁愿通知我的主线程:“嘿,添加了一个新的搜索结果”。
有点像 Windows 资源管理器,在搜索仍在进行时显示搜索结果:
foreach (FileInfo itemToFilter in unfilteredSearchResults)
{
if (extension == ".wav" || extension == ".flac" || extension == ".mp3")
{
// read audio information such as tags etc. Might take some time per file
WaveFileLib.WaveFile.WAVEFile audioItem = new WaveFileLib.WaveFile.WAVEFile(audioFile.FullName);
// Compare audio information such as tags, title, license, date, length etc to filter
if (Filter.AudioItemMatchesFilter(ref audioItem))
{
lock (threadLock)
{
// add search result to list of filtered audio files
this.AudioItemList.Add(audioItem);
}
// notify main thread in order to refresh ui (if applicable)
ParentView.AudioItemAdded();
}
}
}
然后主线程可以从新添加的项目生成视图。
以前,使用 BeginInvoke 很容易做到这一点,但使用 .net core 时,这种可能性似乎消失了。
通知主线程更新搜索结果的替代方案/选项是什么?
【问题讨论】:
-
使用Progress 类。它就是为了这个原因而创建的
标签: c# multithreading user-interface .net-core