WPF метод блокирует интерфейс

Рейтинг: 0Ответов: 1Опубликовано: 08.12.2014

Добрый день.

Подскажите, как можно выполнить длительную функцию, чтобы не тормозилась отрисовка интерфейса на WPF.

Что делаю:

  1. Есть главная форма, в которой вызывается длительный метод.
  2. Перед вызовом этого метода показывается окно, в котором через DispatcherTimer выполняется анимация (картинка крутится).
  3. После выполнения метода окно скрывается.

Метод должен отработать полностью и вернуть результат своей работы. Пока метод не выполнится, основной алгоритм программы выполняться не должен.

Как мне можно такое сделать?

Ответы

▲ 3Принят

Есть тысячи разных способов, но рекомендуемый на текущий момент — async/await.

Попробуйте например так:

async void ShowComputation()
{
    var w = new ComputationWindow();
    w.Show();
    await Task.Run(model.PerformYourComputationHere);
    w.Hide();
}