2013-02-05 2 views
0

타이머에서 내 textBlock을 수정할 수 없습니다.타이머에서 TextBlock 값 수정

여기 내 코드입니다 :

private void Play_Button_Click(object sender, RoutedEventArgs e) 
    { 
      timer = new System.Timers.Timer(1000); 
      timer.Elapsed += new ElapsedEventHandler(displayTime); 
      timer.Enabled = true; 
      try 
      { 
       // video.Play(); 
      } 
      catch (Exception exp) 
      { 
       Console.WriteLine("error: " + exp.Message); 
      } 
     } 
    } 

    private void displayTime(object source, ElapsedEventArgs e) 
    { 
     textProgression.Text = "Test"; 
    } 

모든 초, 내 기능 displayTime를 호출하지만 textProgression의 값이 변경되지 않습니다.

+5

'displayTime'이 호출 될 때마다 텍스트를''Test "'로 설정합니다. 왜 텍스트가 바뀔 것이라고 기대합니까? –

+1

대신'DispatcherTimer'를 사용하십시오. – svick

+1

@AlvinWong 왜 'TextBox'여야합니까? – svick

답변

1

WPF의 UI에 대한 모든 수정 작업은 WPF 스레드 (Dispatcher 스레드)에서 수행해야합니다. 이를 위해

두 가지 옵션이 있습니다

이 textProgression.Text = "테스트"를 호출 스레드를 사용하여 displayTime의를; 디스패처에서 :

private void displayTime(object source, ElapsedEventArgs e) 
{ 
    Dispatcher.Invoke(new Action(() => 
    { 
     textProgression.Text = "Test"; 
    })); 
} 

또는, 내가 생각 여기에 가장 좋은 방법, DispatcherTimer를 사용합니다. 이 타이머에서는 모든 Tick 이벤트가 Dispatcher 스레드에서 시작되기 때문에

private void dispatcherTimer_Tick(object sender, EventArgs e) 
{ 
    textProgression.Text = "Test"; 
} 
+0

간단한 타이머 대신 DispatcherTimer를 사용하여 주셔서 감사합니다. 내 문제를 해결했습니다 :) – Jeremy