2010-06-30 7 views
1

내 WPF 프로젝트에서 다음과 같은 방법을 가지고 (.NET 4) 변경되지 않습니다WPF 이미지 가시성

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

이미지가 DockPanel에, 나는 (그것이 "DoWork 동안 표시 할) "메서드가 실행되고 있지만"MyMethod() "메서드가 종료 될 때까지 상태가 변경되지 않습니다. 누군가이 작업을 올바르게 수행하는 방법을 설명 할 수 있습니까?

도움 주셔서 감사합니다.

+0

다른 스레드에서 실행하고 싶습니다. – spong

답변

8

"DoWork"메서드가 UI 스레드를 차단하고 있습니다. 완료 될 때까지 UI의 내용은 변경되지 않으며 UI도 응답하지 않습니다.

더 나은 옵션은 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()); 
} 
+0

고마워, 리드 - 많이 도와 줬어! (+1) –