На данный вопрос уже ответили: Работа с контролами из фонового потока 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.
Комментариев нет:
Отправить комментарий