C# 自定义控件中的多个并行线程

C# 自定义控件中的多个并行线程,c#,wpf,multithreading,C#,Wpf,Multithreading,我在wpf中,有一个自定义控件 public class MyListControl : ListBox { ... 现在我想运行项,但使用4个不同的线程。一个线程应该占据列表的第一部分,第二个线程应该在第二部分应用计算,依此类推 看看这个伪代码: var originalSource = this.ItemsSource.Cast<object>().ToList(); int part = originalSource.Count / 4; Task.Factory.S

我在wpf中,有一个自定义控件

public class MyListControl : ListBox
{
   ...
现在我想运行
,但使用4个不同的线程。一个线程应该占据列表的第一部分,第二个线程应该在第二部分应用计算,依此类推

看看这个伪代码:

var originalSource = this.ItemsSource.Cast<object>().ToList();
int part = originalSource.Count / 4;

Task.Factory.StartNew(..
    DoSomething(originalSource.Take(part));

Task.Factory.StartNew(..
    DoSomething(originalSource.Skipt(part).Take(part), ...);

Task.Factory.StartNew(..
    DoSomething(originalSource.Skip(part * 2).Take(part), ... );

Task.Factory.StartNew(..
    DoSomething(originalSource.Skip(part * 3).Take(part), ...); ...
var originalSource=this.ItemsSource.Cast().ToList();
int part=originalSource.Count/4;
任务。工厂。开始新(。。
DoSomething(原始来源,参与);
任务。工厂。开始新(。。
DoSomething(原始来源。Skipt(部分)。Take(部分),…);
任务。工厂。开始新(。。
DoSomething(原始来源。跳过(第2部分)。采取(部分),…);
任务。工厂。开始新(。。
DoSomething(原始来源。跳过(第3部分)。获取(部分),…)。。。
总而言之,列表被分成4部分,4个不同的线程将加快计算速度

现在的问题是我该怎么做

我无法在ViewModel中执行此操作,它必须位于自定义控件内

Task.Factory.StartNew似乎是一个错误的工具,因为我遇到了如下异常:

WindowsBase.dll中出现“System.InvalidOperationException”类型的首次意外异常

你们建议我做什么

我尝试了Dispatcher.BeginInvoke,但它们一个接一个地被调用,而不是并行调用


我需要一个并行解决方案。提前谢谢。

使用WaitAll等待线程完成并从列表中传递批处理,怎么样

Task task1 = Task.Factory.StartNew(() => doStuff(list1));
Task task2 = Task.Factory.StartNew(() => doStuff(list2)); 
Task.WaitAll(task1, task2); 

因为你可能正在执行一个计算密集型任务,考虑使用一个代替普通的线程/任务。在后台线程上。

正如我在问题中所说,任务对我不起作用…WindowsBase.dll中出现了“System.InvalidOperationException”类型的第一次意外异常。似乎StartNew(…)在ui线程中无法工作您是否尝试过使用后台工作程序?请参阅:我也尝试过,但我总是遇到此异常WindowsBase中出现“System.InvalidOperationException”类型的第一次意外异常。DLL是否可以显示引发该异常的行?