2014-11-08 3 views
0

WPF 응용 프로그램에 응용 프로그램 내의 텍스트를 200 밀리 초마다 업데이트하는 DispatcherTimer이 있습니다. 이 프로그램은 일련의 카운터, 시계 및 타이머를 표시합니다.DispatcherTimer가 프로그램 "Stutter"를 야기 함

private DispatcherTimer dispatch = new DispatcherTimer(); 

public Timer() 
{ 
    InitializeComponent(); 
    this.dispatch.Interval = TimeSpan.FromMilliseconds(200); 
    this.dispatch.Tick += new EventHandler(updateTimer); 
} 

private void updateTimer(object sender, EventArgs e) 
{ 
    loadingImage.RenderTransform = new RotateTransform(counter * 36); 
    counter++; 

    try 
    { 
     clock.Text = DateTime.Now.ToString(@clockFormat.Text); 
    } 
    catch (Exception) { } 

    try 
    { 
     watch.Text = watchCounter.Elapsed.ToString(@watchFormat.Text); 
    } 
    catch (Exception) { } 
} 

DispatcherTimer가 실행 될 때마다 오전 데 문제는, 내 응용 프로그램에서 "더듬"가 발생합니다. 마치 이벤트 핸들러를 실행할 때마다 프로그램이 조금 뒤처집니다. 이 지연을 제거 할 수있는 방법이 있습니까?

+1

예외가 발생 했습니까? 예방 조치로 try-catch를 추가 했습니까? –

+0

타이머가 멈추거나 UI의 다른 부분에서 타이머가 지연되고 있습니까? 디스패처 타이머의 우선 순위를 높이면보다 일관된 속도로 실행됩니다. [이 질문] (http://stackoverflow.com/questions/14354561/how-to-make-dispatchertimer-events-smoother-in-wpf)을 참조하십시오. –

+0

@mikez 타이머가 계속 유지되지 않으면 UI 스레드가 이미 오버로드 된 것입니다. 말더듬은 과부하 증상 일뿐입니다. – usr

답변

0

타이머가 지연을 일으키지 않습니다. 귀하의 코드가 않습니다. UI 스레드에서 렌더링로드를 작성 중입니다. 애니메이션을 적용하는 요소가 다시 그리기 쉽도록 그리기를 최적화하십시오.

또한 타이머 대신 애니메이션을 사용하는 것이 좋습니다.

또한 타이머가 시간에 왜곡 될 수 있습니다. 카운터 카운터와 같은 증분 계산은 본질적으로 불안정합니다. 앱이 시작될 때를 기록하고 경과 된 시간부터 카운터 값을 계산합니다.

+0

회전 변환은 어떻게 최적화합니까? –

+0

변형도 문제가되지 않습니다. 외관상으로는, UI는 당기기가 비싸다. 표준 WPF 최적화 기술을 적용하십시오. – usr

0

가능한 원인으로 RotateTransform에 대한 빠른 검색 지점. 이 대답은 https://stackoverflow.com/a/8766252/166333을 참조하십시오. 여기서 프로세스 수준에서 차단을 언급합니다. 거기에 당신을 위해 일할 수있는 몇 가지 대답이 있습니다.

+0

나는이 링크가 GDI +를위한 것이라고 생각한다. –