2009-08-17 3 views
4

IsIndeterminate 속성을 true로 설정하여 WPF 진행률 표시 줄 컨트롤을 사용하려고합니다. 내가 가지고있는 문제는 업데이트되지 않는다는 것입니다.WPF 진행 표시 줄을 사용하는 방법?

나는 이런 식으로 뭔가를하고 있어요 :

pbProgressBar.Visibility = Visibility.Visible; 
//do time consuming stuff 
pbProgressBar.Visibility = Visibility.Hidden; 

내가 스레드에서이 포장하려고 노력하고 디스패처 객체를 전달합니다. 이 문제는 어떻게 해결해야합니까?

+0

무엇이 업데이 트되지 않는다는 것을 의미합니까? IsIndeterminate를 true로 설정하면 연속 "진행률"만 표시되고 value 속성은 무시되므로 실제로 업데이트되지 않고 계속 진행됩니다. 당신은 그것이 전혀 아무것도하지 않는다는 것을 말하고 있습니까? –

답변

5

당신은 백그라운드 스레드에서 물건을 소비하는 시간을 수행해야합니다, 당신은 Visibility가 백그라운드 스레드가 일을하고있다 후 까지 Hidden로 다시 설정되어 있지 않은지 확인해야합니다. 기본 과정은 다음과 같습니다.

private void _button_Click(object sender, RoutedEventArgs e) 
{ 
    _progressBar.Visibility = Visibility.Visible; 

    new Thread((ThreadStart) delegate 
    { 
     //do time-consuming work here 

     //then dispatch back to the UI thread to update the progress bar 
     Dispatcher.Invoke((ThreadStart) delegate 
     { 
      _progressBar.Visibility = Visibility.Hidden; 
     }); 

    }).Start(); 
} 
+0

스레드를 죽여야합니까? –

+0

아니요, 종료되면 정리됩니다. 백그라운드에서 작업을 실행하는 데는 몇 가지 방법 중 하나입니다. ThreadPool을 살펴보십시오. –

+0

사실 OnWorkpleer는 무료 일 때 OnCompleted 알림을 제공하기 때문에 실제로 일회용 작업이있는 경우 BackgroundWorker가 더 적합하며 UI 스레드에 표시됩니다. 또한 예제에서 Invoke를 호출하여 작업자 스레드를 차단할 필요가 없습니다. BeginInvoke는 잘 수행 할 것입니다 –

관련 문제