2014-10-20 2 views
0

레이블과 진행률 표시 줄이 포함 된 대화 상자를 업데이트하려고합니다. 실제로 내 응용 프로그램에서 데이터를 백업하는 동안 백업을하는 동안 진행률 표시 줄과 현재 백업중인 항목을 나타내는 레이블을 표시하려고합니다. 이걸 사용하여 진행 상황을 호출합니다.Windows 7의 다른 스레드에서 진행률 막대를 업데이트

Application.Current.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Action)(() => { dialog.ProgressbarValue = "Backing up first item"; })); 

이 작업은 Windows8에서 제대로 작동하지만 Windows 7에서는 아무 것도 업데이트되지 않습니다. 제발 도와주세요. 감사합니다

+2

당신이 다른 DispatcherPriority, 아마도'Background'을 시도해 봤어 문제를 해결 설정? – Clemens

+0

예, 'DispatcherPriority.Send'는 Windows 8에서도 작동하지 않습니다.'DispatcherPriority.Loaded'는 Windows 8에서 작동하지만 Windows 7에서는 작동하지 않습니다. – WAQ

+0

일반 우선 순위를 사용하지 않는 이유는 무엇입니까? 이것은 OS 버전과 상관없이 동일하게 작동합니다. –

답변

0

DispatcherPriority.ApplicationIdle 실제로

1

루프가 실행되는 동안 모든 텍스트를 표시 할 수 있도록 텍스트 상자에 새로 고침을 적용해야합니다.

새로 고침 루틴을 포함 할 ExtensionMethods의 정적 클래스가 있어야합니다.

public static class ExtensionMethods 
    { 
     private static Action EmptyDelegate = delegate() { }; 

     public static void Refresh(this UIElement uiElement) 
     { 
      uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate); 
     } 
    } 

전화는 dialog.ProgressbarValue 주를 설정할 때마다 후 코드에서이 extentionMethod : 당신은 코드에서이 논리 간단한 설정 dialog.ProgressbarValue에서 Dispatcher를 가지고 dialog.Refresh를 사용하여 새로 고침 방법 이상으로 호출 할 필요는 없습니다();

관련 문제