C# 将后台工作人员的数量限制为两个,并在添加时完成作业
我目前有一个treeview,其中treeview项目绑定到ICommand接口,当项目选择更改时,该接口将被调用,如下所示:C# 将后台工作人员的数量限制为两个,并在添加时完成作业,c#,wpf,queue,backgroundworker,C#,Wpf,Queue,Backgroundworker,我目前有一个treeview,其中treeview项目绑定到ICommand接口,当项目选择更改时,该接口将被调用,如下所示: private ICommand _TreeviewSelectedItemChanged; public ICommand TreeviewSelectedItemChanged { get { if (_TreeviewSelectedItemChange
private ICommand _TreeviewSelectedItemChanged;
public ICommand TreeviewSelectedItemChanged
{
get
{
if (_TreeviewSelectedItemChanged == null)
{
_TreeviewSelectedItemChanged = new DelegateCommand(delegate()
{
foreach (TreeViewClass tree in treeViewObsCollection)
{
TreeViewSubItem subItem = tree.mainNodes.FirstOrDefault(s => s.treeViewItemIsSelected);
if (subItem != null)
{
queueofJobs.Enqueue(subItem.subItemName);
//Call Background Worker here?
}
}
});
}
return _TreeviewSelectedItemChanged;
}
}
用户单击的每个treeView项都将添加到此名为queueofJobs的队列中。我想做的是这样的:
如果有人能帮我找到解决问题的合适方法,那就太好了。任何其他方法,而不是后台工作也可以。提前感谢。
BackgroundWorker
不再是这方面的合适/最佳工具。您可以为此使用的:
ActionBlock<TreeViewSubItem> workerBlock =
new ActionBlock<TreeViewSubItem>(i => DoWork(i),
new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 2 });
这将通过在单独的线程池线程中为每个项目调用
DoWork
来处理每个子项目(最多并行2个)。BackgroundWorker
不再是用于此的正确/最佳工具。您可以为此使用的:
ActionBlock<TreeViewSubItem> workerBlock =
new ActionBlock<TreeViewSubItem>(i => DoWork(i),
new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 2 });
这将通过在一个单独的线程池线程中为每个项目调用
DoWork
来处理每个子项目(最多并行2个)。简单、简短、甜蜜。非常感谢你的回答:)简单,简短,甜蜜。非常感谢您的回答:)