我想一个一个地处理几个下载请求,因此我使用队列。这是列表,它在不同的时间从不同的脚本中填充 public Queue<WebDownloader> webDownloaderQ;公共方法允许不同的脚本/资源在不同时间动态填充队列: public void EnqueABDownloading(WebDownloader abToDownload) { singleAbLoader.Enqueue(abToDownload); }下载开始很快,因为它甚至发现了一个队列对象,(记住在此期间队列可以递增), public void StartDownloading() { //while (singleAbLoader.Count > 0) //{ // singleAbLoader. //} for (int i = 0; i < singleAbLoader.Count; i++) { singleAbLoader[i].//this is not supporting unable to call my method//I want to call one of the function (startdowloaind) of WebDownloader before the deque } }我试图编写上面的下载功能,但问题是,我不知道该怎么做。我尝试将索引与对象一起使用,它说不能将索引应用于 Queue 类型的表达式。编辑:记住:我想在 Dequeue 对象之前调用其中一个函数 ( StartDowloaind) 。WebDownloader我想先排队请求,原因是每个请求都需要一些时间来下载。所以,首先排队下载请求然后,检查下载循环是否正在运行,如果没有,则启动循环作为特定的下载完成出列请求。
2 回答

慕雪6442864
TA贡献1812条经验 获得超5个赞
您可以使用foreach循环遍历队列。foreach不出队
public void StartDownloading()
{
foreach(WebDownloader wd in singleAbLoader)
{
wd.Start();
}
}
考虑你的评论:
由于下载可能不会按开始顺序完成,因此请使用 aList而不是 Queue。
你的班级WebDownloader显然有类似DownloadCompleted事件的东西,你可以从那里的列表中删除它。或者,如果您需要,只需将其添加到已完成下载的队列中。

qq_笑_17
TA贡献1818条经验 获得超7个赞
请使用 Dequeue 方法弹出项目如下
while (singleAbLoader.Count>0)
(
WebDownloader method= singleAbLoader.Dequeue();
method.StartDowloaind();
}
通过这种方式,即使队列增加,它也会继续使用弹出窗口,而不需要索引。
ConcurrentQueue如果队列将被多个线程使用,我还建议使用
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消