2010-03-16 3 views
2

У меня более длительный многошаговый процесс с использованием BackgroundWorker и C#. Я должен быть уверен, что каждый шаг будет успешно завершен, прежде чем перейти к следующему шагу. Я видел много ссылок на то, чтобы позволить BackgroundWorker улавливать ошибки и отменять нажатие на кнопку «Отмена», но я хочу сам проверить ошибку, а затем изящно завершить процесс. Я отношусь к нему так же, как кто-то нажал кнопку отмены, или есть другой способ?Отмена BackgroundWorker в потоке

+0

Когда вы говорите: «Я хочу проверить ошибку самостоятельно», вы хотите сказать, что поток BackgroundWorker проверяет наличие самой ошибки? И отмените фоновое задание, если есть ошибка? –

+0

Нет, скажем, например, что в базе данных отсутствует информация, необходимая для выполнения шагов. Это не приведет к ошибке, но это может вызвать проблемы, если разрешено продолжать. –

ответ

5

Учитывая BackgroundWorker bgWrk:

Вы можете установить bgWrk.Cancel = true; при возникновении ошибки. Это имеет следующие эффекты:

Это значит, что флаг CancellationPending соответствует true, на который вы можете периодически проверять фонового работника, а затем отменить его соответствующим образом. Насколько я знаю, это будет считаться «лучшей практикой».

Затем вы можете убедиться, что код вашего кода не запущен, если установлен флаг CancellationPending и в основном ждет, чтобы его отменили. Он должен работать изящно для вас.

+0

+1 Хорошее гладкое решение! Это дает хорошие идеи. Благодаря! =) –

+0

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

+2

Кроме того, DoWork должен установить Args.Canceled = true, чтобы передать статус Отмена на событие Completed. –