C# 自定义控件中的多个并行线程
我在wpf中,有一个自定义控件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
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是否可以显示引发该异常的行?