我创建了一个每5分钟收集大约500条记录的线程。然后通过foreach语句我为每个获得的细节创建了单独的后台工作者。我通过检查队列中的条件收集数据(Db中的'QU' )。背景工作者Do_Work事件我将'QU'状态更新为'PR'。
BackgroundWorker bw1;
Collection collect = new Collection()
foreach (Transaction trans in transactionList)
{
try
{
collect.TransactionDetails = trans;
bw1 = new BackgroundWorker();
bw1.DoWork += new DoWorkEventHandler(bw1_DoWork);
bw1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw1_RunWorkerCompleted);
bw1.RunWorkerAsync(collect);
}
catch
{ }
}
这是一个漫长的过程,因此必须使用backgroundworker运行。 我的问题是,如果此过程需要超过线程休眠时间来完成,那么将再次收集具有“QU”状态的相同记录。我如何理解该过程仍在运行并使线程等待更长时间直到完成
答案 0 :(得分:0)
您需要以某种方式跟踪正在运行的进程。执行此操作的最基本方法是使用在创建BackgroundWorker
时递增的计数器变量,并在完成时递减。然后,您只需查看变量的值即可找出仍在运行的BackgroundWorker
的数量。
如果你使用的是.NET 4,你也可以查看Task Parallel Library。
另一件事:据我所知,你创建了500多个项目的工作线程?这对我来说似乎很重要。考虑将工作负载划分为更少的更大的部分。
答案 1 :(得分:0)