У меня более длительный многошаговый процесс с использованием BackgroundWorker и C#. Я должен быть уверен, что каждый шаг будет успешно завершен, прежде чем перейти к следующему шагу. Я видел много ссылок на то, чтобы позволить BackgroundWorker улавливать ошибки и отменять нажатие на кнопку «Отмена», но я хочу сам проверить ошибку, а затем изящно завершить процесс. Я отношусь к нему так же, как кто-то нажал кнопку отмены, или есть другой способ?Отмена BackgroundWorker в потоке
ответ
Учитывая BackgroundWorker
bgWrk:
Вы можете установить bgWrk.Cancel = true;
при возникновении ошибки. Это имеет следующие эффекты:
Это значит, что флаг CancellationPending
соответствует true, на который вы можете периодически проверять фонового работника, а затем отменить его соответствующим образом. Насколько я знаю, это будет считаться «лучшей практикой».
Затем вы можете убедиться, что код вашего кода не запущен, если установлен флаг CancellationPending
и в основном ждет, чтобы его отменили. Он должен работать изящно для вас.
+1 Хорошее гладкое решение! Это дает хорошие идеи. Благодаря! =) –
Благодарим вас за подтверждение того, что, как я предполагал, нужно сделать. Я просто не хотел делать это предположение, не видя, есть ли другой (или лучший) способ. –
Кроме того, DoWork должен установить Args.Canceled = true, чтобы передать статус Отмена на событие Completed. –
Когда вы говорите: «Я хочу проверить ошибку самостоятельно», вы хотите сказать, что поток BackgroundWorker проверяет наличие самой ошибки? И отмените фоновое задание, если есть ошибка? –
Нет, скажем, например, что в базе данных отсутствует информация, необходимая для выполнения шагов. Это не приведет к ошибке, но это может вызвать проблемы, если разрешено продолжать. –