Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

Как работать с gui из Async потока? [дубликат]

На данный вопрос уже ответили: Работа с контролами из фонового потока 2 ответа Как работать с gui из Async? Ну вот например : есть progressbar и есть button у которого на событии Async onclick лежит следующий код Await Task.Run((){progressbar.value = 77}) и он конечно же "вылетает", так вот, что мне делать?


Ответ

Самый простой вариант — если вы уж находитесь в async-функции, то не вызывайте Task.Run раньше времени. Например, вы можете сделать как-то так:
async void OnClick(object sender, RoutedEventArgs e) { button.IsEnabled = false; for (int i = 0; i < 10; i++) { // выгружаем в фоновый поток ту операцию, которая должна быть асинхронной bool isGood = await Task.Run(() => ComputePart(i)); // остаток кода продолжает бежать в UI-потоке if (isGood) progressBar.Value = i; } button.IsEnabled = true; }
Ещё три варианта описаны в отличном ответе @Lightness.

Комментариев нет:

Отправить комментарий