2013-02-05 47 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線程(分派器線程)中完成。

爲此,你有兩個選擇:

使用線程,以及調用displayTime = textProgression.Text 「測試」;在調度員中:

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

或者,我假設的最佳方法是使用DispatcherTimer。因爲在此計時器中,所有Tick事件都在分派器線程中觸發。

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

謝謝大家,使用DispatcherTimer代替簡單的計時器解決了我的問題:) – Jeremy