修改Timer中TextBlock的值

时间:2013-02-05 15:47:39

标签: c# wpf

我无法在Timer中修改我的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的值。

1 个答案:

答案 0 :(得分:1)

您在WPF中对UI所做的任何修改都必须在WPF线程(Dispatcher线程)中完成。

为此你有两个选择:

使用线程,并在displayTime中调用textProgression.Text =“Test”;在Dispatcher中:

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";
}