【发布时间】:2014-11-21 22:20:00
【问题描述】:
我有一个 WPF 项目,因为我有多个 WPF 窗口。
在其中一个窗口中,我将其命名为 Window2 我有一个文本块,如下所示:
<TextBlock Grid.Row="0" Name="motorTitle" Text="this is test" Visibility="Visible" Foreground="Red" Grid.Column="0" FontSize="20" HorizontalAlignment="Center"></TextBlock>
在 Window2 文件后面的代码中,我有以下内容:
public string text = ".";
private void timer_Tick(object sender, EventArgs e)
{
this.motorTitle.Text = text;
}
在另一个 WPF 窗口中,我将其命名为 MainWindow,我尝试通过这样做来更新 Window2 的文本
Window2.text = "my text";
所以,当我在调试模式下运行时,我可以看到 Window2 的文本变量更改为“我的文本”,但它没有更新到显示屏上的文本块。?
我试了一下,但没有找到。
有什么想法吗?
【问题讨论】:
-
显示创建和启动计时器的代码。另外,您是否在 timer_Tick 中设置了断点来验证它是否被调用?
-
启动定时器的代码是这个 public DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(300); timer.Tick += timer_Tick;计时器.Start();是的,断点在“文本”中显示数据。
-
你必须调试你的代码:定时器事件发生了吗?然后告诉
Window2是什么:它是一个实例吗?你确定它是同一个实例(新手经常创建new实例而不是使用正确显示的窗口一个)?另外,我会使用x:Name而不是Name,不要问我why。 -
定时器事件有效。 Windows2 是在 MainWindow 中创建的一个实例
-
我在尝试编写 motorTitle.text = text; 时看到此错误“调用线程无法访问此对象,因为另一个线程拥有它。”