【问题标题】:timer in windows phonewindows phone 中的计时器
【发布时间】:2015-11-28 14:14:11
【问题描述】:

我在 windows phone 中有这样的代码

private void btnrun_Click(object sender, RoutedEventArgs e)
{
    t = 0;
    Start_timer();
}

public void Start_timer()
{
    timer2 = new DispatcherTimer();
    timer2.Tick += timer_Tick2;
    timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000);
    timer2.Start();
}

void timer_Tick2(object sender, object e)
{
    t++;
    txttime.Text = t.ToString();
}

第一次使用,从1,2,3,4...开始显示,但再次点击时,从2,4,6 ....再次点击,显示3,6... 有没有办法在每次失败单击按钮 1、2、3、4 时运行您的显示? 谢谢!!!

【问题讨论】:

  • 在开始新的计时器之前,您需要停止初始计时器。

标签: c# timer windows-phone-8.1


【解决方案1】:

试试这样的:

private void btnrun_Click(object sender, RoutedEventArgs e)
{
    t = 0;
    Start_timer();
}

public void Start_timer()
{
    if (timer2 != null)
    {
        timer2 -= timer_Tick2; // unassigns the event handler
        timer2.Stop(); // stops the timer
    }
    timer2 = new DispatcherTimer();
    timer2.Tick += timer_Tick2;
    timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000);
    timer2.Start();
}

void timer_Tick2(object sender, object e)
{
    t++;
    txttime.Text = t.ToString();
}

编辑:如果你只想启动一次计时器,它可以简化为:

private void btnrun_Click(object sender, RoutedEventArgs e)
{
    t = 0;
    if (timer2 == null)
        Start_timer();
}

public void Start_timer()
{
    timer2 = new DispatcherTimer();
    timer2.Tick += timer_Tick2;
    timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000);
    timer2.Start();
}

void timer_Tick2(object sender, object e)
{
    t++;
    txttime.Text = t.ToString();
}

【讨论】:

  • 为什么不直接重用现有的计时器呢?无需每次都重新创建。
  • @PeterTorr-MSFT 我没有创建代码,也不想更改功能。我刚刚为他提供了一个解决方案,可以满足他的需求......
  • 不完全是因为计时器仍将按照旧的时间表(最多可能会关闭一秒钟)。您想将t 重置为零并每次都停止/启动计时器。只有初始设置在if != null 检查下。
  • @PeterTorr-MSFT 你说得对,我完全忘记了't'。
【解决方案2】:

使用Stop() 方法在每次点击之前停止计时器,然后再次运行。

private void btnrun_Click(object sender, RoutedEventArgs e)
        {
            t = 0;
            timer2.Stop();
            Start_timer();
        }

每个定时器都注册在同一个Tick回调上:

timer2.Tick += timer_Tick2;

所以这就是问题的原因。

【讨论】:

  • 在 btnrun_Click 上执行此操作将在第一次单击按钮时导致 NullReferenceException 并且计时器永远不会启动(至少在显示的代码中)
  • 是的,确实应该初始化计时器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
相关资源
最近更新 更多