C # Выполнять несколько задач параллельно - PullRequest
0 голосов
/ 29 июня 2018

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

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

Проблема в том, что, когда я испытываю это, колесо блокируется и не вращается. Причина в том, что приложение подключено к серверу, поэтому оно не дает колесу вращаться. Как только приложение успешно подключится, колесо начнет вращаться.

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

Я использую кольцо прогресса mahapps

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Асинхронный и параллельный это две разные вещи. В этом случае вы хотите отобразить вращающееся колесо и подключиться к серверу параллельно. Это означает, что вам нужно будет подключиться к серверу в другом потоке, отличном от потока пользовательского интерфейса, где отображается вращающееся колесо. Поток пользовательского интерфейса не может одновременно обновлять колесо и подключаться к серверу.

Предпочтительным способом написания многопоточного и параллельного кода в .NET является использование Task Parallel Library (TPL) . Вы можете запустить задачу и ждать ее, используя ключевые слова async / await, которые были введены в C # 5 / .NET Framework 4.5, например:

spinningWheel.Visibility = Visibility.Visible;
await Task.Run(()=> { /* connect to the server here... */ });
spinningWheel.Visibility = Visibility.Collapsed; //the server is connected
0 голосов
/ 29 июня 2018

Для сценария, подобного вашему, я настоятельно рекомендую вам взглянуть на Асинхронное программирование с асинхронным ожиданием .

Вот хороший ресурс для этого https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

...