Что происходит с данными, которые передаются фоновому исполнителю и от него?
Данные передаются из основного потока в фоновый рабочий процесс с помощью RunWorkerAsync:
backgroundWorker.RunWorkerAsync(myData);
Это получено в обработчике событий DoWork в фоновый поток:
myData = (Data)e.Argument;
После того, как DoWork обработал данные, он возвращает их с помощью e.Result:
e.Result = myData;
Это получено в обработчике событий RunWorkerCompleted в основном потоке:
myData = (Data)e.Result;
BackgroundWorker заботится о передаче данных между нити. Я ожидаю, что буду передавать большие объемы данных фоновому работнику и от него, поэтому я хочу знать, каковы накладные расходы на эту передачу, и есть ли лучший способ обработки большого количества объектов в памяти в фоновом работнике. Я также хотел бы знать, что можно получить доступ к данным в фоновом работнике из основного потока потокобезопасным способом.
Для справки, я использую C #, .Net 3.5 и Windows Forms.