Назначьте работу в backgroundworker_DoWork () в соответствии с условием - PullRequest
0 голосов
/ 28 сентября 2010

В приложении Winform я хочу использовать одного фонового работника (или может быть один для каждой формы) для выполнения разных задач в разных событиях.Например: поиск, загрузка данных в сетку, открытие новых форм, отправка электронных писем, передача файлов и т. Д.

Как мне управлять всем этим в событиях backgroundWorker_DoWork () и backgroundWorker_RunWorkerCompleted ()?

Чтооптимальный способ / лучшая практика для этого?

1 Ответ

2 голосов
/ 28 сентября 2010

Обычно я в итоге вызываю работника параметром, например так:

backgroundWorker.RunWorkerAsync(<some argument here>);

Затем внутри вашего метода DoWork вы можете извлечь аргумент из e.Argument, и в зависимости от того, что это за аргумент, вы знаете, что вы хотите с ним сделать.

Если вам не нужен аргумент для чего-либо еще, вы можете создать перечисление со значениями, которые вам нужны, например Search, Load и т. Д., И передать его, а затем проверить это значение в DoWork, чтобы выберите то, что вы хотите сделать. Помните, что вы должны привести обратно к перечислению внутри Dowork, поскольку e.Argument является объектом.

Что касается RunWorkerCompleted, вы можете заполнить e.Result значением внутри DoWork, а также извлечь его из метода RunWorkerCompleted.

Это лучший способ сделать это, и он будет полностью безопасен для потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...