Путаница с HTTPWEBREQUEST - PullRequest
       2

Путаница с HTTPWEBREQUEST

0 голосов
/ 17 декабря 2011

Я получаю список подключений, где-то 70 человек в списке, иногда 1000, я зацикливаю его и начинаю получать их один за другим, используя HTTPWEBREQUEST, и у меня есть текстовое поле, которое показывает мне, где я нахожусь, 10-15 или 200 и т. д.,

Моя проблема в том, что у меня есть кнопка остановки, и когда я нажимаю кнопку остановки, я хочу, чтобы она вырвалась из нее, как я могу этого добиться?

Мне не ясно, что делать, когда я нажимаю Стоп? Потому что форма (это приложение формы Windows) застревает / зависает до тех пор, пока не будет завершена ...

Любая помощь приветствуется, Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Похоже, вы делаете всю работу в потоке пользовательского интерфейса. Вместо этого вам следует либо использовать асинхронные веб-запросы (возможно, используя WebClient) или делать загрузку в рабочем потоке (например, используя BackgroundWorker). Таким образом, ваш пользовательский интерфейс останется отзывчивым, и у вас может быть какой-то общий флаг, указывающий, следует ли продолжать обработку списка. Обратите внимание, что вы захотите использовать volatile, lock или класс Interlocked, чтобы убедиться, что изменения, внесенные в флаг общего доступа в потоке пользовательского интерфейса, видны в рабочем потоке.

Другой альтернативой является использование параллельной библиотеки задач (TPL) из .NET 4 с маркером отмены . Это немного сложнее, но в конечном итоге будет чище.

Обратите внимание, что C # 5 значительно облегчит асинхронность.

0 голосов
/ 17 декабря 2011

Для этой задачи вы должны использовать BackgroundWorker , чтобы ваш пользовательский интерфейс не блокировался. Все длительные операции должны выполняться в потоке, отличном от потока пользовательского интерфейса, чтобы пользовательский интерфейс оставался отзывчивым. Фоновый работник поддерживает отмену с использованием метода CancelAsync().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...