0

我无法在 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 的值不会改变。

4

1 回答 1

1

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

为此,您有两种选择:

使用线程,并在 displayTime 调用 textProgression.Text = "Test"; 在调度程序中:

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";
}
于 2013-02-05T15:56:09.937 回答