Фоновый рабочий - сообщать о ходе выполнения с помощью строкового массива

Мне нужно вернуть несколько значений 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 при попытке установить значения массива результатов.

9
задан Olivier Jacot-Descombes 11 November 2012 в 22:36
поделиться