Ken*_*ndt 2 c# task-parallel-library parallel.foreach
我有以下代码:
Parallel.ForEach(this.listView2.CheckedItems,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
(CheckedItem) =>
{
//do something
});
Run Code Online (Sandbox Code Playgroud)
我得到以下编译错误:
无法从用法中推断出方法'System.Threading.Tasks.Parallel.ForEach(System.Collections.Concurrent.OrderablePartitioner,System.Threading.Tasks.ParallelOptions,System.Action)'的类型参数.尝试显式指定类型参数.
我搜索了如何使用listview与任务,但找不到任何东西.
如何在ListView中使用Parallel.ForEach?
ListView.CheckedItems返回一个CheckedItemsListViewCollection,它没有实现任何泛型集合类型,因为它位于.NET 1.x区域,后面还没有泛型.您需要告诉PLinq集合中存在哪些类型的项目.如果您阅读文档,CheckedListViewCollection包含ListViewItems.您可以使用Linq通过使用Cast扩展方法显式指定类型.
Parallel.ForEach(this.listView2.CheckedItems.Cast<ListViewItem>(),
new ParallelOptions { MaxDegreeOfParallelism = 4 },
(CheckedItem) =>
{
//do something
});
Run Code Online (Sandbox Code Playgroud)
整个讨论可能会过时,因为ListViews(以及大多数其他winform控件)只能从UI线程访问.如果必须并行,则可以在ListViewItem中创建数据的副本并对其进行处理.