Я знаю, что этот вопрос опубликовал несколько раз, но эта ситуация другая. Поэтому я предполагаю, что я выполняю метод, который необходимо перебирать через несколько элементов (строки базы данных), для этого требуется много времени.
Теперь в моем BackgroundWorker
Мне нужно в каком-то случае остановить синхронизацию, в частности, когда пользователь нажмет кнопку. То, что я сделал в _DoWork
случае это:Не удается остановить BackgroundWorker
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
while (!worker.CancellationPending)
{
LongOperation();
}
}
теперь проблема, что когда я называю worker.CancelAsync()
LongOperation()
продолжить выполнение, но не должны! потому что while
имеют состояние CancellationPending
. Я видел в сети, что это решение thread-safe
, так что, может быть, я что-то делаю неправильно?
Что вы имеете в виду? Ожидаете ли вы, что LongOperation() будет прерван в _middle_ его выполнения? –
@AdrianoRepetti Точно, мне нужно остановить его посредине выполнения. – IlDrugo
Вам нужно будет войти в LongOperation и выйти из любых циклов, которые у вас есть. – LarsTech