如何找出一个后台工作者完成了它的内部启动循环C#的工作

时间:2012-06-05 06:47:17

标签: .net windows c#-4.0 service

我创建了一个每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”状态的相同记录。我如何理解该过程仍在运行并使线程等待更长时间直到完成

2 个答案:

答案 0 :(得分:0)

您需要以某种方式跟踪正在运行的进程。执行此操作的最基本方法是使用在创建BackgroundWorker时递增的计数器变量,并在完成时递减。然后,您只需查看变量的值即可找出仍在运行的BackgroundWorker的数量。

如果你使用的是.NET 4,你也可以查看Task Parallel Library

另一件事:据我所知,你创建了500多个项目的工作线程?这对我来说似乎很重要。考虑将工作负载划分为更少的更大的部分。

答案 1 :(得分:0)