在更新UI元素时锁定并行Linq
本文关键字:锁定 并行 Linq 元素 更新 UI | 更新日期: 2023-09-27 18:11:54
我使用并行linq从文本文件加载链接列表。我检查每一行是否它是一个有效的链接(Uri)或不…如果它是一个有效的Uri,它被添加到一个列表框。我只是想知道我是否应该锁定列表框。项,同时添加链接。
这是我的代码。
if (openFile.ShowDialog() == DialogResult.OK)
{
File.ReadLines(openFile.FileName).AsParallel().AsOrdered().ForAll(x =>
{
if (x.IsValidUri())
{
//lock(siteList.Items) <-should I?
siteList.Invoke(new Action<string>(s => siteList.Items.Add(s)), x);
}
});
}
在这种情况下不需要锁定。使用Invoke()
已经强制对Items集合的所有更改在GUI线程上同步发生。
正因为如此,使用AsParallel()
并没有真正获得任何东西。你可以考虑使用BeginInvoke()
代替,这可能会加快一些事情。这样,调用线程就不用等待调用完成。