Цикл приостановки / возобновления в фоновом режиме - PullRequest
6 голосов
/ 02 декабря 2011

У меня есть цикл в Фоновом работнике в приложении Winform.

Я только что использовал этот Код , но он не возобновится после паузы.

ВОсновной класс, которым я пользуюсь

System.Threading.ManualResetEvent _busy = new System.Threading.ManualResetEvent(false);

Затем в «Моем старте» я написал следующее:

      if (!backgroundWorker1.IsBusy)
            {
                MessageBox.Show("Not Busy"); //Just For Debugg
                _busy.Set();
                Start_Back.Text = "Pause";
                backgroundWorker1.RunWorkerAsync(tempCicle);   
            }
            else
            {
                _busy.Reset();
                Start_Back.Text = "Resume";
            }

            btnStop.Enabled = true;

Затем в фоновом режиме doWork я написал следующее:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
     m_addTab addTabsInvoke = addTabUrl2;
      Invoke(addTabsInvoke, "http://www.google.com");
        foreach (something)
                {
                    _busy.WaitOne();

                    if (backgroundWorker1.CancellationPending)
                    {
                        return;
                    }
                    if (tabs.InvokeRequired)
                        {
    ......
    ......

Я не могу понять, почему пауза работает, а резюме не работает.Я что-то не так сделал?

1 Ответ

10 голосов
/ 02 декабря 2011

Моя лучшая догадка о том, что вы хотите:

void ResumeWorker() {
     // Start the worker if it isn't running
     if (!backgroundWorker1.IsBusy) backgroundWorker1.RunWorkerAsync(tempCicle);  
     // Unblock the worker 
     _busy.Set();
}

void PauseWorker() {
    // Block the worker
    _busy.Reset();
}

void CancelWorker() {
    if (backgroundWorker1.IsBusy) {
        // Set CancellationPending property to true
        backgroundWorker1.CancelAsync();
        // Unblock worker so it can see that
        _busy.Set();
    }
}
...