【发布时间】:2014-08-04 07:00:42
【问题描述】:
我在 XAML 中创建了一个名为 TbTimer 的简单 Label
我做了以下代码:
class Level2
{
public Level2()
{
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
}
public int counter;
public void timer_Tick(object sender, EventArgs e)
{
counter++;
}
public DispatcherTimer timer;
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
lvl2 = new Level2();
}
private void MenuItemMedium_Click(object sender, RoutedEventArgs e)
{
lvl2.timer.Start();
TbTimer.Content = lvl2.counter.ToString();
}
}
然后我有另一个按钮,当单击该按钮时我调用TimerUpdater。
当我运行程序并单击按钮时,我可以看到TextBlock 的内容显示数字 1...并且它不会继续运行数字 - 当我在 5 后再次单击按钮时秒显示数字 6。
所以我猜计时器在幕后运行良好,但TextBlock 的内容只有在我单击按钮时才会更新。
我应该怎么做才能使TextBlock 内容在不单击按钮的情况下更新秒数?希望我的解释和问题是清楚的。
【问题讨论】:
-
您必须更新计时器上的标签,而不仅仅是增加一个不相关的变量。 ps:方法中有方法。
-
谢谢 Jeroen,但是...我如何更新计时器上的文本块?我在这方面很新,希望你能指导我
-
我不完全确定,但
Dispatcher.Invoke(() => TbTimer.Text = counter);应该是关于它的(在你的Timer_Tick方法中)。 -
我认为在这种情况下
Dispatcher.Invoke是不必要的,因为正在使用DispatcherTimer,所以回调应该在 UI 线程中触发(我相信)。 -
我编写了 dispatcher.invoke 但系统要求我提供我不熟悉的“委托方法”...有什么建议吗?