У меня есть список объектов, и я хочу запустить процесс 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
}