Я использовал BackgroundWorker
для загрузки некоторых веб-сайтов, вызывая WebClient.DownloadString
внутри цикла.Я хотел, чтобы пользователь мог отменить загрузку в середине загрузки, поэтому я вызывал CancelAsync
всякий раз, когда обнаруживал, что в середине цикла был включен CancellationPending
.
Но теперь я заметил, что функция DownloadString
иногда зависает, поэтому я решил использовать DownloadStringAsync
(все это внутри другого потока, созданного с помощью BackgroundWorker
).И поскольку я не хочу переписывать весь код, выходя из цикла и функции после вызова DownloadStringAsync
, я сразу же после вызова сделал цикл while, который ничего не делает, кроме проверки на переменную bool Stop
, которую я включаюЗначение true, когда вызывается обработчик события DownloadStringCompleted
или когда пользователь запрашивает отмену операции.
Теперь, странная вещь - это то, что она отлично работает на отладочной версии;но в первом выпуске программа зависает в цикле while, как если бы это был основной поток.