Я создаю массив BackgroundWorker, который совместно использует один обработчик событий, например:
BackgroundWorker[] workers = new BackgroundWorker[files.length];
for(int i = o; i<files.length; i++)
{
workers[i] = new BackgroundWorker();
workers[i].DoWork += new DoWorkEventHandler(worker_DoWork);
workers[i].RunWorkerCompleted += newRunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
workers[i].RunWorkerAsync(files[i]);
}
Все работники используют один и тот же обработчик событий, который делает одно и то же только с разными аргументами и приводит к следующему результату:
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ComputeSomething(e.Argument.ToString());
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
resultArray.Add(e.Result);
}
private int ComputeSomething(string file)
{
...
return number;
}
очевидно, в коде я пытаюсь составить список BackgroundWorker, который работает асинхронно, но когда я проверил результаты, некоторые из них неверны. Я предполагаю, что значение «e.result» было заменено другими работниками, поскольку они используют один и тот же обработчик событий, если это так, тогда я хотел бы создать отдельные обработчики событий для каждого BackgroundWorker, чтобы значение e.result не будет заменен Как я это сделаю?