0

我启动了一个线程,它每 5 分钟收集大约 500 条记录。然后通过 foreach 语句,我为获得的每个详细信息创建了单独的后台工作程序。我通过检查队列中的条件(数据库中的“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
                    { }
                }

这是一个漫长的过程,因此必须使用后台工作程序运行。我的问题是,如果这个过程需要超过线程睡眠时间才能完成,那么将再次收集具有“QU”状态的相同记录。我如何理解该过程仍在运行并使线程等待更多时间直到完成

4

2 回答 2

0

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

如果您使用的是 .NET 4,您可能还想查看Task Parallel Library

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

于 2012-06-05T06:59:39.297 回答
0

使用异步回调

http://msdn.microsoft.com/en-us/library/system.asynccallback.aspx

http://support.microsoft.com/kb/315582

于 2012-06-05T07:02:42.937 回答