【问题标题】:System timer c#系统定时器 c#
【发布时间】:2017-06-01 15:22:17
【问题描述】:

我有一些涉及系统计时器的代码,该计时器在将文件添加到文件夹时以秒为单位开始计数,然后在删除文件时停止。当计时器停止时显示正确的时间但是当我重新启动计时器时,它会从停止的地方开始,而不是在 0 处重新开始。这是我的代码..

        t2 = new System.Timers.Timer();
        t2.AutoReset = true;
        t2.Interval = 1000;
        t2.Elapsed += OnTimeEvent2;
        watch();

    }
    private void OnTimeEvent2(object sender, System.Timers.ElapsedEventArgs e)
    {
        Invoke(new Action(() =>
        {

            s += 1;

            lblSeconds.Text = string.Format(s.ToString());

        }));
    }

【问题讨论】:

  • 您是否希望 s 回到 0?如果是这样,那么当您停止(或启动)计时器时,您实际上将 setting s 设置为 0。你呢?
  • 这种增加计数器的方法在较长时间内会非常不准确。请改用Stopwatch 类,只需在计时器事件中使用经过的时间更新标签即可。
  • 我是计时器新手,不确定如何实现秒表类。你能给我一个样品吗?
  • 是的,我们的想法是将 s 设置为零

标签: c# timer system


【解决方案1】:

使用 System.Windows.Forms.Timer,因此您无需担心跨线程。下面是一个使用 Stopwatch 类的简单示例:

private System.Windows.Forms.Timer tmr = new Timer();
private System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

private void Form1_Load(object sender, EventArgs e)
{
    tmr.Interval = 1000;
    tmr.Tick += Tmr_Tick;
    tmr.Start();
    sw.Start();
}

private void Tmr_Tick(object sender, EventArgs e)
{
    lblSeconds.Text = ((int)sw.Elapsed.TotalSeconds).ToString();
}

要让计时器再次从零开始,只需使用 Restart() 方法:

private void button1_Click(object sender, EventArgs e)
{
    sw.Restart();
}

【讨论】:

    【解决方案2】:

    我建议改用DispatcherTimer。这样您就不需要手动调用 GUI 线程。此外,它将在Stop/Start 上重置。

    【讨论】:

    • 这看起来像winforms的问题,它不是关于重启计时器,而是关于重置Label中计时器显示的值。
    • 是的,这就是我正在尝试做的事情,当计时器停止时,我有一种方法可以获取标签的值,然后将其重置为零,然后当新文件到达我的文件夹时重新开始正在使用工具箱中的计时器,但它会开始快速计数,而不是保持正常速度。
    【解决方案3】:

    您可能想要执行其他操作来阻止许多计时器运行: 创建文件时,在某处注册 DateTime 并在文件上放置 filesystemwatcher

    ..然后在观察者删除事件上再次获取 DateTime 并进行比较。

    事实上,如果您只是监视文件夹中特定文件的出现和消失,文件系统观察器可以帮助您检测这两个事件。

    当您检测到文件删除时,请记住手动重新设置您的计数器。

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多