Intereting Posts
Есть ли хороший способ разделить int на два коротких (.NET)? Почему не статический конструктор родительского classа, вызываемый при вызове метода в вложенном classе? Строки не могут быть программно добавлены в коллекцию строк datagridview, когда элемент управления привязан к данным Прочитать xml из URL передача аргументов командной строки в кодированных тестах ui Тернар? оператор против обычного оператора If-else в c # Каков идеальный способ написать «возврат» в методе Невозможно неявно преобразовать ‘string’ в ‘System.TypeCode’ На каком streamе (-ах) WebClient поднимает свои события? Создание файла фиксированной ширины в C # WebAPi – унифицировать формат сообщений об ошибках от ApiController и OAuthAuthorizationServerProvider Как инициализировать массив структуры? Как десериализовать ответ JSONP (желательно с JsonTextReader, а не строку)? C # эквивалент импорта подстановочных знаков в Java Копирование файлов рекурсивно

Безопасно ли отменить подписку DoWork после вызова RunWorkerAsync, но до выхода функции?

У меня много методов (они работают только по одному), все они используют одни и те же RunWorkerCompleated и ProgressChanged но все они имеют разные методы Dowork . Можно ли сделать следующее:

 private void button_Process_Click(object sender, EventArgs e) { bgWork_Process.DoWork += Scrub_DoWork; bgWork_Process.RunWorkerAsync(); bgWork_Process.DoWork -= Scrub_DoWork; } 

или я могу нанести удар по этому делу? Я ничего не видел в MSDN на нем, говоря, что это не разрешено, и оно пока (пока) работает нормально в моей программе, но я хотел проверить здесь, чтобы увидеть, есть ли у кого-нибудь проблемы, чтобы это сделать.

Что вы можете сделать, чтобы убедиться, что обработчик событий не удаляется, пока вы не закончите с ним, было бы сделать что-то подобное

 Action DoWorkAction; private void button_Process_Click(object sender, EventArgs e) { gbHistory.Enabled = false; gbScrub.Enabled = false; DoWorkAction = new Action(Scrub_DoWork); bgWork_Process.DoWork += DoWorkAction; bgWork_Process.RunWorkerAsync(); } 

И в чем бы ни заключалось ваше завершение

 private void bgWork_Process_CompletedHandler(object sender, EventArgs e) { bgWork_Process.DoWork -= DoWorkAction; } 

Однако я чувствую, что лучше всего иметь отдельные BackGroundWorkers для всех ваших действий, которые вам нужно выполнить, вместо того, чтобы делиться подобным с этим или обернуть в classе, чтобы вы могли более четко понимать, что вы делаете.