2011-07-27 12 views
2

WPF (예 : 레이블 텍스트)의 컨트롤을 올바르게 변경하면 Dispatcher에 업데이트가 대기열에 포함됩니다. Dispatcher는 내 코드가 완료 될 때까지 대기하고 전체 큐를 처리하는 시간을 갖습니다. ReportProgress이 이벤트 핸들러WPF - 동기 UI 업데이트

private void handlerProgressMade (object sender, ProgressEventArgs e) 
{ 
    pbProgress.Value = pbProgress.Maximum * e.Percent; 
    lbProgressMessage.Content = e.Message; 
} 

에 이벤트를 호출 전체의 ProgressBar 및 표시 "완료"메시지와 함께 끝,하지만 intersteps가 표시되지 않습니다

double current = 0; 
ReportProgress (0d, "ProcessingStarted"); 
foreach (var item in collection) 
{ 
     item.Process(); //takes about 10s 
     current++; 
     ReportProgress (current/(double)collection.Count, "Processing item No. " + current.ToString() + " finished"); 
} 
ReportProgress (1d, "Finished"); 

를 호출이 들어

.

다른 스레드에서 함수를 호출하고 UI를 비동기 적으로 업데이트하여 수행 할 수 있다는 것을 알고 있습니다. (그리고 어떤 시점에서 발생합니다.)하지만 이제는 스레드를 추가하는 것이 불필요한 복잡성처럼 보입니다.

Dispatcher가 즉시 갱신 및 다시 그릴 수있게하는 방}은 + y입니까? 당신이 배경 스레드를 사용하려는 해달라고하면

+0

나는 당신이 다른 옵션을 가지고있는 것처럼 느껴진다. 스레딩을 위해 가야한다. 아무도 해결하지 못한다면 스레딩을 할 것이다. 다음 링크는 스레딩 http : //bathinenivenkatesh.blogspot을 구현하는 데 도움이 될 수있다. .com/2011/07/wpf-build-more-responsive-ui.html – Bathineni

+0

@bathineni 스레드로 처리 할 수 ​​있다는 것을 알고 있습니다. UI가 응답하는 경우 중요하지 않습니다. 단지 진행 상태가 양호 할 것입니다. – Lukas

+1

@ 루카스 .. 내가 틀릴 수도 있습니다.하지만 나에게 진도를보고하는 것은 UI 응답 일뿐입니다. – Bathineni

답변

0

, 당신은 진행률 표시 줄의 값을 설정 한 후 이전과 이후, Application.DoEvents()의 옛 해킹은 버스

GUI를 메시지에 쌓여있어 모든 메시지 큐를 삭제 대기로 도움이 될 수 있습니다
+0

System.Windows.Forms.Application.DoEvents(); (wpf 응용 프로그램에서 올바르게 느껴지지 않습니다.) 최종 업데이트 속도가 느려지면서 모든 상태가 완전히 끝났을 때 모든 상태가 깜박이는 것을 볼 수 있지만 요청할 때 UI 업데이트가 거의 없습니다. – Lukas

+0

도움이 될 것 같습니까? http://dedjo.blogspot.com/2007/08/how-to-doevents-in-wpf.html? –