我有一个应用程序,它使用DispatcherTimer来管理时间,倒计时等等。我确实在应用程序打开时打开了多个计数器。但时间有点延迟,我说每分钟大约3-5秒。这是我使用的代码的一部分:
DispatcherTimer ob = new DispatcherTimer();
ob.Interval = new TimeSpan(0, 0, 1);
private void bob_Click(object sender, RoutedEventArgs e) //Button starting countdown
{
ob.Start();
tikOb = 140;
ob.Tick += new EventHandler(ob_Tick);
}
void ob_Tick(object sender, EventArgs e)
{
tob.Text = tikOb.ToString();
if (tikOb > 0)
{
tikOb--;
}
else
{
ob.Stop();
tob.Text = "STOPPED";
ob.Tick -= new EventHandler(ob_Tick);
}
//Between these there is a code which is irrelevant in this case.
private void stopob_Click(object sender, RoutedEventArgs e) //Button breaking countdown
{
ob.Tick -= new EventHandler(ob_Tick);
ob.Stop();
tob.Text = "ON";
{
谁能告诉我为什么会这样?我在代码中做了什么错吗?哦,我在代码中还有另一个使用不同变量等的它。它完全分开了。提前谢谢!
答案 0 :(得分:0)
DispatcherTimer在UI线程上执行。如果UI线程当前正忙于执行超过间隔的其他工作,则它将延迟Timer事件的执行并在其无需先前工作时调用它。如果您需要更精确的计划,那么您应该花一段时间而不是在后台运行,例如System.Threading.Timer
或Task.Delay
可以await
,如果您正在使用.NET 4.5及以上。如果您使用Timer
然后调用UI线程逻辑,则必须记住将工作封送回UI线程。