извините, но нет необходимости делать все это так же печально Hans_passant, все, что вам нужно сделать, это вставить инстанцирование массива строк внутри цикла
ужно возвращать несколько значений STRING от моего фонового работника в каждом цикле, поэтому я попытался использовать второй параметр ReportProgress в качестве строкового массива. Пример кода:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string[] workerResult = new string[2];
for (int i=0; i<someNumber; i++)
{
//do some heavy calculating
workerResult[0] = "this string";
workerResult[1] = "some other string";
backgroundWorker1.ReportProgress(i, workerResult) // also tried workerResult[] and [2]
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
string[] results = (string[])e.UserState;
MessageBox.Show(results[0]); // line of error
MessageBox.Show(results[1]); // line of error
}
Он компилируется, но во время выполнения в тот момент, когда я пытаюсь получить доступ к возвращенной строке Userstate, я получаю сообщение об ошибке: «Ссылка на объект не установлена для экземпляра объекта».
Мне кажется, что что-то не так при передаче параметра массива делегату ProgressChanged или в методе ProgressChanged при попытке установить значения массива результатов.