我有一个包含我要下载的项目的列表。我使用 for 循环来迭代列表。
对于此列表中的每个项目,我启动一个引用该项目的新线程。我的问题是我想同时限制 maxDownload。
for (int i = downloadList.Count - 1; i >= 0; i--)
{
downloadItem item = downloadList[i];
if (item.Status != 1 && item.Status != 2)
{
ThreadStart starter = delegate { this.DownloadItem(ref item); };
Thread t = new Thread(starter);
t.IsBackground = true;
t.Name = item.Name;
t.Priority = ThreadPriority.Normal;
t.Start();
}
}
我读了一些有关 ThreadPool 的内容,但后来我无法引用我的项目。有人能帮我吗?谢谢! :)
Edit:
我测试了这个:
ThreadPool.SetMaxThreads(maxDownloads, maxDownloads);
ThreadPool.SetMinThreads(maxDownloads, maxDownloads);
ThreadPool.QueueUserWorkItem(DownloadItem, ref item);
我不知道如何用这个线程引用我的 downloadItem......
如果您使用 .NET 4,我强烈建议使用并行.ForEach(可能在 downloadList.Reverse() 上)
所以,像这样:
Parallel.ForEach(downloadList.Reverse(),
new ParallelOptions { MaxDegreeOfParallelism = 8 },
item => this.DownloadItem(item));
如果您不希望调用线程阻塞,当然可以使用 QueueUserWorkItem 这个调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)