【发布时间】:2009-08-18 07:54:58
【问题描述】:
我使用 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中继续运行,因为它会重新启动worker。我在想,也许 Timer 的组合可以解决这种情况,为其他工作线程提供方式。
BackgroundWorker 仍然是一个不错的选择吗?像我一样重用 BackgroundWorker 是否常见?
编辑 1: 澄清:我面临的问题是,我需要使用自己的 BackgroundWorker 管理集合。我正在考虑一个计时器,以定期从每个项目中触发请求。这就是我卡住的地方。
编辑2:看我自己的回答,我没有解决这个问题,但发现我可以配合计时器来得到我想要的。
编辑 3: 澄清(再次尝试,我不擅长)我想要实现的目标:我有跟踪对象,用于 gps 跟踪。我想跟踪一大堆,所以每个跟踪设备一个对象。他们都需要经常轮询。我为单个测试对象设置了 BackgroundWorker。我喜欢后台工作人员在完成时告诉我的方式。但我无法让它与所有跟踪对象一起工作。
现在每个跟踪对象都有自己的计时器。这个计时器生成一个新线程并执行耗时的工作(我将其命名为 DoWrite)。不需要 BackgroundWorker,因为我处理了计时器然后创建了一个新计时器。就是这样。
【问题讨论】:
-
也许你应该解释一下你看到的集合和计时器之间的关系。我无法从问题中弥补。
标签: c# multithreading backgroundworker