[prg] Организация другого потока: подвисает форма
Всем хорошего настроения.
Есть форма с элементом TreeView и множеством узлов TreeNode. Есть метод,
который берёт данные из этих узлов TreeNode и делает запросы в Интернет.
Результаты запросов, после обработки в методе, возвращаются в TreeView.
И всё бы ничего, но на время запроса форма намертво виснет, что логично,
но крайне неудобно. Раньше в похожих случаях пользовался компонентом
BackGround и горя не знал, но оказалось, что этот компонент не умеет
работать с контролами формы из другого потока, так что приходится искать
иное.
Помогите, пожалуйста, примером кода распараллеливания. Я так понимаю,
метод, где производится запрос в Интернет, нужно вывести в другой поток.
С потоками пока до конца не разбирался, хотя уже кое-что начал читать.
Нужен именно пример кода, а не ссылки в сеть на статьи, ибо нашёл их уже
вагон и три тележки.
Пробовал как-то так:
this.BeginInvoke(new Action(() =>
{
..метод, подвешивающий форму до своего завершения...
}));
Но форма как висела так и висит.
Здравствуйте, Кирил.
Если метод просто выполняет http запрос, то нет необходимости в создании
дополнительных потоков, достаточно выполнить эту операцию асинхронно, то
есть вызвать асинхронную версию метода выполнения запроса используя
ключевое слово
await.
То есть вызов будет выглядеть как-то так:
var response =await httpClient.GetAsync(url);
// действия, которые выполнятся после завершения запроса
Асинхронный вызов не блокирует вызывающий поток, а это приводит к тому,
что форма не будет зависать.
Тут лучше подкину вам еще одну небольшую тележку:
https://metanit.com/sharp/tutorial/13.3.php