场景
我的应用程序中有一个后台工作程序运行并执行大量处理。我专门使用这个实现来保持我的用户界面流畅并防止它卡住。我想保留后台工作人员,但在该线程内,只产生 3 个线程 - 让它们共享处理(目前工作线程只是循环并逐个处理每个 Assets 。但是我想加快这个速度但只使用有限数量的线程。
问题
给出下面的代码,我怎样才能让循环选择一个空闲的线程,然后在没有空闲的线程继续之前基本上等待。
代码
foreach (KeyValuePair<int, LiveAsset> kvp in laToHaganise)
{
Haganise h = new Haganise(kvp.Value,
busDate,
inputMktSet,
outputMktSet,
prodType,
noOfAssets,
bulkSaving);
h.DoWork();
}
想法
我猜我必须从创建 3 个新线程开始,但我担心的是,如果我每次都实例化一个新的 Haganise 对象——我如何才能将正确的“h”对象传递给正确的线程......
Thread firstThread = new Thread(new ThreadStart(h.DoWork));
Thread secondThread =new Thread(new ThreadStart(h.DoWork));
Thread thirdThread = new Thread(new ThreadStart(h.DoWork));
非常感谢帮助。
最佳答案
根据线程必须完成的工作的大小,ThreadPool.QueueUserWorkItem可能是一个不错的选择。这将创建一个线程并将其放入队列中,并在池中有可用线程时执行它。
或者,您可以创建自己的池类型,它有 3 个线程并使用 ManualResetEvent确定特定线程何时完成。
关于循环中的 C# WinForms 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605896/