c# – 在集合项中使用的BackgroundWorker
我使用Backgroudworker做一些工作,以便做一些耗时的任务.
public void ConnectDataProvider() { bgw = new BackgroundWorker(); bgw.DoWork += new DoWorkEventHandler(bgw_DoWork); bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted); } 另一种方法启动后台工作程序: public void StartPolling() { bgw.RunWorkerAsync(); } 然后我做了事件处理: void bgw_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e) { // do it over again StartPolling(); } void bgw_DoWork(object sender,DoWorkEventArgs e) { // do work WriteData(); } 正如你所看到的,我完成了工作人员.现在这适用于单个背景工作者. 现在我想要一个集合,每个项目都应该执行此任务.然而,根据上面的概念,它将继续在第一个工作者开始运行,因为它启动了工作人员.我在想,也许一个Timer组合可以解决这种情况,让其他工作者的线程方式. BackgroundWorker仍然是一个不错的选择吗?像我一样重复使用BackgroundWorker是常见的吗? 编辑1:要求:我面临的问题是,我需要使用自己的BackgroundWorker来管理集合.我正在考虑一个计时器,定期从每个项目中提出请求.这就是我被困住的地方. 编辑2:看到我自己的答案,我没有解决这个问题,但发现我可以跟定时器一起得到我想要的东西. 编辑3:澄清(另一次尝试,我不擅长)我想要实现的目标:我有跟踪对象,用于gps跟踪.我想跟踪它们中的一大堆,因此每个跟踪设备都有一个对象.他们都需要经常接受调查.我为一个测试对象设置了BackgroundWorker.我喜欢他们的方式,背景工作者会告诉我它什么时候完成.但我无法使用所有跟踪对象. 现在每个跟踪对象都有自己的计时器.这个计时器产生一个新线程并完成耗时的工作(我将其命名为DoWrite).不需要BackgroundWorker,因为我处理了计时器,然后创建了一个新的计时器.就是这样. 解决方法
这些可能有多少?您应该小心在集合和线程中的项之间创建1:1关系.另一个程序员可能会比你计划的更多地扩展这个系列.
对于这样的事情,我通常只想使用一个线程和一个队列 – 因此事件只需要在ConcurrentQueue中完成需要完成的工作,如果没有运行则线程启动,并通过排队的工作进行搅拌,直到它为止没事做,死了.下次更多的工作将在事件中检查线程是否正在运行并启动它. 它更便宜,因为如果有很多事情发生,你只运行一个线程而不是停止并启动很多线程,或者如果进行的很少,那么一个线程几乎从不运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 'artifactId' is missing. @ line 2, column 10
- ruby – 将电子邮件组织成线程的算法?
- xml解析
- grid.常规使用
- Oracle学习笔记之第七节手动数据库链介绍
- Flex运用Module模块化编程时遇到的若干问题
- Cocos2d-X 学习笔记 15 cocos2dx之CCUserDefault及其数据进
- 如何在Iphone中点击UIButton设置UiScrollView Frame?
- ruby-on-rails – 来自Facebook的Access_token的Rails认证
- c – 可以复制elision / RVO导致同一对象的复制/移动