后台工人的IsBusy属性不可靠

时间:2013-09-20 20:16:25

标签: c# .net multithreading backgroundworker

我已经检查了系统

 public void ProcesssMessages(ResponseEventArgs message)
        {
            _queue.Enqueue(message);

            if (!backgroundWorker1.IsBusy)
            {
                backgroundWorker1.RunWorkerAsync();
            }
        }

仍然它给了我错误backgroundworker1已经在运行,你不能运行它两次。这是我的屏幕中唯一一个运行后台工作程序的点,所以在此期间没有人可以从其他部分运行它。

是否有某种方法可以使其安全或防止失败。

我没有处理完成的事件,因此我无法阻止该事件。 我无法在已完成的事件中运行它,因为这是在用户控件中,有人访问此用户控件中的方法,我将该消息添加到队列中。然后我需要使用后台工作程序处理该消息,但首先需要检查后台工作程序是否已经在处理队列。后台工作者的代码是

 void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        while (_queue.Count > 0)
        {
            ResponseEventArgs currentMessage = _queue.Dequeue();
            if (currentMessage != null)
            {
                AddUpdateDataRow(currentMessage);
                UpdateMainUI();
            }
        }
    }

UpdateMainUI方法的代码

   private void UpdateMainUI()
        {
            if (gridControl1.InvokeRequired)
            {
                gridControl1.Invoke(new MethodInvoker(UpdateMainUI));
            }

            gridControl1.RefreshDataSource();
        }

由于

0 个答案:

没有答案