WPF изображение не меняется - PullRequest
1 голос
/ 30 июня 2010

У меня есть следующий метод в моем проекте WPF (.net 4):

private void MyMethod(){
    imgMyImage.Visibility = Visibility.Visible;
    DoWork();
    imgMyImage.Visibility = Visibility.Collapsed;
}

Изображение находится в DockPanel, и я хочу, чтобы оно отображалось во время использования метода DoWork ()выполняется, но не изменяет состояние, пока не завершится метод «MyMethod ()».Может кто-нибудь объяснить, как правильно это сделать?

Спасибо за любую помощь.

1 Ответ

8 голосов
/ 30 июня 2010

Ваш метод "DoWork" блокирует поток пользовательского интерфейса.Пока он не завершится, ничто в пользовательском интерфейсе не изменится (и пользовательский интерфейс останется без ответа).

Лучший вариант - поместить DoWork в фоновый поток.Например, используя новый каркас задач в .NET 4, вы могли бы написать это как:

private void MyMethod()
{
    imgMyImage.Visibility = Visibility.Visible;

    // Create a background task for your work
    var task = Task.Factory.StartNew( () => DoWork() );

    // When it completes, have it hide (on the UI thread), imgMyImage element
    task.ContinueWith( t => imgMyImage.Visibility = Visibility.Collapsed, 
            TaskScheduler.FromCurrentSynchronizationContext() );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...