我使用 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();
}
如您所见,我在完成后重新启动了工人。现在这适用于单个后台工作人员。
现在我想要一个集合,每个项目都应该执行这个任务。然而,有了上面的概念,它只会在第一个启动的worker中继续运行,因为它会重新启动worker。我在想,也许 Timer 的组合可以解决这种情况,为其他工作线程提供方式。
BackgroundWorker 仍然是一个不错的选择吗?像我一样重用 BackgroundWorker 是否常见?
编辑 1:澄清:我面临的问题是,我需要用自己的 BackgroundWorker 管理每个集合。我正在考虑一个计时器,以定期从每个项目中触发请求。这就是我卡住的地方。
编辑 2:查看我自己的答案,我没有解决这个问题,但发现我可以配合计时器来获得我想要的东西。
编辑 3:澄清(另一种尝试,我不擅长)我想要实现的目标:我有跟踪对象,用于 gps 跟踪。我想跟踪一大堆,所以每个跟踪设备一个对象。他们都需要经常轮询。我为单个测试对象设置了 BackgroundWorker。我喜欢后台工作人员在完成时告诉我的方式。但我无法让它与所有跟踪对象一起工作。
现在每个跟踪对象都有自己的计时器。这个计时器生成一个新线程并执行耗时的工作(我将其命名为 DoWrite)。不需要 BackgroundWorker,因为我处理了计时器然后创建了一个新计时器。这就是它所做的一切。