我已经尝试了下面的这些代码,它可以正常工作并且性能也很好。但是当我运行nunit测试用例时,它不能正常工作。我对并行linq或parallel foreach不了解。是否有可能将代码转换为并行linq 。请 提出您的宝贵建议。
Parallel.ForEach(ListofData, item =>
{
if (this.DataSource != null && item != null)
{
string itemText = this.GetListViewItemValue(item, this.displayMember);
if (!string.IsNullOrEmpty(this.Text) && itemText.ToLower().Equals(this.Text.ToString().ToLower()))
{
this.textBox.Text = itemText.ToString();
this.textBox.SelectAll();
this.listView.SelectedItems.Add(item);
}
}
});
答案 0 :(得分:5)
恭喜,您是我的第1000个答案
何时应使用并行foreach,何时应使用并行 linq?
它们都做完全相同的事情,都是基于任务并行库构建的,只是语义不同。
看看所有的重载和扩展方法,您会发现有时编写 PLinq 更加容易,有时编写Parallel.For/Foreach
对于您的问题,与任何一种方法都没有直接关系。但是,您 ARE 试图从可能不同的线程更新 UI 并注定会失败。
不会失败的唯一原因是内部人员认为这不是线程值得的,并且正在原始上下文中运行。
我认为您确实需要重新考虑您的方法,并且如果您确实想使用多个线程,则需要 但是当我运行nunit测试用例时,它不起作用 关于您的测试用例...我认为您目前有更大的问题,您的代码不是线程安全的