我正在用 C# 编写一个下载器,但遇到了以下问题:我应该使用哪种方法来并行下载并更新我的 GUI?
在我的第一次尝试中,我使用了 4 个线程,在每个线程完成后我又开始了另一个:主要问题是我的 cpu 在每个新线程启动时都会 100% 运行。
谷歌搜索,我发现 BackgroundWorker 和 ThreadPool 的存在:声明我想用我正在下载的每个链接的进度更新我的 GUI,最好的解决方案是什么?
1)创建4个不同的BackgroundWorker,为每个ProgressChanged事件附加一个委托给我的GUI中的一个函数以更新进度?
2) 使用 ThreadPool 并将最大和最小线程数设置为相同的值?
如果我选择#2,当队列中没有更多线程时,它会停止 4 个工作线程吗?它会暂停他们吗?由于我必须下载不同的链接列表(每个链接 20 个链接)并在一个完成后从一个链接移动到另一个,线程池是否在每个列表之间启动和停止线程?
如果我想更改实时工作线程的数量并决定使用 ThreadPool,从 10 个线程更改为 6 个,它会抛出异常并停止 4 个随机线程吗?
这是唯一让我头疼的部分。我提前感谢你们每一个人的回答。