我的WP7应用程序中有一个单例计时器但是我不知道如何在每次计时器滴答时更新文本块...有没有办法让计时器的事件处理程序滴答,然后更新文本框用正确的时间?
以下是我尝试使用但不起作用的内容:
public _1()
{
InitializeComponent();
Singleton.TimerSingleton.Timer.Tick += new EventHandler(SingleTimer_Tick);
}
void SingleTimer_Tick(object sender)
{
textBlock1.Text = Singleton.TimerSingleton.TimeElapsed.TotalSeconds.ToString();
}
这是我的Timer.cs SingleTon:
答案 0 :(得分:4)
void SingleTimer_Tick(object sender)
上面的方法应该是
void SingleTimer_Tick(object sender, EventArgs e)
当您提出问题时,请正确使用您的术语并提供更多详细信息。它可以帮助您更快地得到正确的答案。例如,当你说“应用程序不会让我调用...”时,你实际意味着编译器会给你一个错误。
答案 1 :(得分:3)
SingleTimer_Tick方法在非GUI线程上执行。致电
textBlock1.Invoke(()=> textBlock1.Text = Singleton.TimerSingleton.TimeElapsed.TotalSeconds.ToString());
答案 2 :(得分:0)
我不确定你的计时器是哪种类型。一些用于在线程池线程上引发事件,另一些用于GUI线程上。如果您可以告诉我们您的计时器的类型(System.Timers.Timer,System.Threading.Timer等),那么我可以告诉您它的用途。但是,如果我没记错的话,Tick用于GUI计时器,而Elapsed用于其他计时器 - 我可能错了。
冒着光顾你的风险,我会问你是否已启动你的计时器:)通常调用Start()或将Enabled设置为true将启动计时器对象。如果您希望计时器已经运行,那么您应该能够检查诸如Enabled之类的属性,以便在连接事件之前断言它正在运行。
除此之外,我还会进行一些printf样式调试,以检查事件是否实际被提升。