为了账号安全,请及时绑定邮箱和手机立即绑定

在 C# 出队前执行操作

在 C# 出队前执行操作

C#
富国沪深 2022-12-04 11:04:14
我想一个一个地处理几个下载请求,因此我使用队列。这是列表,它在不同的时间从不同的脚本中填充 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事件的东西,你可以从那里的列表中删除它。或者,如果您需要,只需将其添加到已完成下载的队列中。


查看完整回答
反对 回复 2022-12-04
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

请使用 Dequeue 方法弹出项目如下


while (singleAbLoader.Count>0)

(

WebDownloader method= singleAbLoader.Dequeue();

 method.StartDowloaind();


}

通过这种方式,即使队列增加,它也会继续使用弹出窗口,而不需要索引。


ConcurrentQueue如果队列将被多个线程使用,我还建议使用


查看完整回答
反对 回复 2022-12-04
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号