Отправляет email-рассылки с помощью сервиса Sendsay

[prg] Организация другого потока: подвисает форма

Всем хорошего настроения.

Есть форма с элементом TreeView и множеством узлов TreeNode. Есть метод,
который берёт данные из этих узлов TreeNode и делает запросы в Интернет.
Результаты запросов, после обработки в методе, возвращаются в TreeView.
И всё бы ничего, но на время запроса форма намертво виснет, что логично,
но крайне неудобно. Раньше в похожих случаях пользовался компонентом
BackGround и горя не знал, но оказалось, что этот компонент не умеет
работать с контролами формы из другого потока, так что приходится искать
иное.

Помогите, пожалуйста, примером кода распараллеливания. Я так понимаю,
метод, где производится запрос в Интернет, нужно вывести в другой поток.
С потоками пока до конца не разбирался, хотя уже кое-что начал читать.
Нужен именно пример кода, а не ссылки в сеть на статьи, ибо нашёл их уже
вагон и три тележки.

Пробовал как-то так:

this.BeginInvoke(new Action(() =>
{
..метод, подвешивающий форму до своего завершения...
}));

Но форма как висела так и висит.

Ответить   Wed, 19 Sep 2018 06:14:55 +0300 (#3583204)

 

Ответы:

Здравствуйте, Кирил.

Если метод просто выполняет http запрос, то нет необходимости в создании
дополнительных потоков, достаточно выполнить эту операцию асинхронно, то
есть вызвать асинхронную версию метода выполнения запроса используя
ключевое слово
await.
То есть вызов будет выглядеть как-то так:
var response =await httpClient.GetAsync(url);
// действия, которые выполнятся после завершения запроса

Асинхронный вызов не блокирует вызывающий поток, а это приводит к тому,
что форма не будет зависать.
Тут лучше подкину вам еще одну небольшую тележку:
https://metanit.com/sharp/tutorial/13.3.php

Ответить   Wed, 19 Sep 2018 11:43:15 +0300 (#3583228)

 

Приветствую всех.

Если речь о классе BackgroundWorker , то нельзя обращаться к компонентам
пользовательского интерфейса из обработчика DoWork. Для этого надо
использовать обработчики ProgressChanged и RunWorkerCompleted.
Об этом сказано в официальной документации и пример там вполне доступный.

Успехов. Анатолий.
Исходное сообщение >
Раньше в похожих случаях пользовался компонентом

Ответить   "i_chay" Wed, 19 Sep 2018 23:42:53 +0300 (#3583323)