DispatcherTimer中的延迟倒计时

时间:2014-05-09 21:56:00

标签: c# windows-phone-8

我有一个应用程序,它使用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";
    {

谁能告诉我为什么会这样?我在代码中做了什么错吗?哦,我在代码中还有另一个使用不同变量等的它。它完全分开了。提前谢谢!

1 个答案:

答案 0 :(得分:0)

DispatcherTimer在UI线程上执行。如果UI线程当前正忙于执行超过间隔的其他工作,则它将延迟Timer事件的执行并在其无需先前工作时调用它。如果您需要更精确的计划,那么您应该花一段时间而不是在后台运行,例如System.Threading.TimerTask.Delay可以await,如果您正在使用.NET 4.5及以上。如果您使用Timer然后调用UI线程逻辑,则必须记住将工作封送回UI线程。