我有一个应用程序,使用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";
{
有人能告诉我为什么会这样吗?我在密码里做错什么了吗?哦,我在代码中还有一个,它使用不同的变量等等,完全分开了。提前感谢!
发布于 2014-05-09 22:05:22
DispatcherTimer在UI线程上执行。如果UI线程目前正忙着做超出间隔的其他工作,它将延迟计时器事件的执行,并在没有先前工作的情况下调用它。如果您需要更精确的调度,您应该比在后台运行一段时间,比如System.Threading.Timer
或Task.Delay
,如果您使用的是.NET 4.5或更高版本,则可以使用await
编辑。如果使用Timer
,然后调用UI线程逻辑,则必须记住将工作封送回UI线程。
https://stackoverflow.com/questions/23574575
复制相似问题