У вас может быть список в качестве члена самой формы, и рабочий может добавлять в него, как он выполняет свою работу (поскольку рабочий код будет принадлежать форме, элемент будет находиться в области видимости).
Поэтому, если вы хотите, чтобы работник добавил свои элементы в определенный экземпляр списка;сначала установите его в элемент, прежде чем запускать работника.
Однако вы должны быть осторожны с этим подходом, чтобы не получить доступ к этому списку во время работы работника;как это не потокобезопасно.В .Net 4 вы можете использовать ConcurrentBag - поточно-ориентированный.
Если вы не хотите этого делать, тогда Result
член аргументов события, передаваемых вКак вы говорите, событие RunWorkerCompleted
используется для передачи результатов, и именно здесь вы должны вернуть свой список.Вы также можете использовать событие ProgressChanged
( на MSDN ) для потоковой передачи отдельного снимка результатов.
Я не думаю, что это неоправданно: асинхронные операции принципиально отличаютсяПарадигма синхронных вызовов, вы просто не можете использовать одну и ту же семантику «вызов и возврат».