1

我已在系统中进行检查

 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();
        }

谢谢

4

0 回答 0