我无法在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的值。
答案 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";
}