Фоновый рабочий процесс в для каждого цикла C # - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть список объектов, и я хочу запустить процесс backgroundworker для обработки каждого объекта в списке.BWP должен отключить пользовательский интерфейс, завершить его работу и onComplete, должен снова включить пользовательский интерфейс.

Я попытался вызвать BGW внутри цикла foreach и также передать список в RunAsyn.Но, похоже, это не работает.Предполагаемое поведение должно состоять в том, что BWP должен выбирать один элемент за раз и завершать все операции (обычно около 1 минуты для каждой операции с объектом), активировать пользовательский интерфейс и затем переходить к следующему элементу в списке объектов.

Iпопробовал это до сих пор

   public void CalculateAll()
    {
        using (BackgroundWorker backgroundWorker = new BackgroundWorker())
        {
            backgroundWorker.DoWork += bwCalculate_DoWork;
            backgroundWorker.RunWorkerCompleted += bw_RunWorkerCompleted;
            // Start the background worker
            backgroundWorker.RunWorkerAsync(objList);
        }
    }

   private void bwCalculate_DoWork(object sender, DoWorkEventArgs e)
    {
        var objList = e.Argument as List<objects>;
        var worker = sender as BackgroundWorker;            
        foreach (var obj in objList )
        {
             //disable UI (buttons etc)
            //process the obj
            //wait for BWP to finish
           //move to next item
        }           
    }

   private void bw_RunWorkerCompleted(object sender,   
   RunWorkerCompletedEventArgs e)
    {
        //enable UI
    }
...