系统计时器c#

时间:2017-06-01 15:22:18

标签: c# timer system

我有一些涉及系统计时器的代码,当文件被添加到文件夹时会以秒为单位开始计数,然后在删除文件时停止。当计时器停止时显示正确的时间,但是当我重新启动计时器时,它会从停止的位置开始,而不是在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());

        }));
    }

3 个答案:

答案 0 :(得分:0)

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

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

事实上,如果您只是监控文件夹中的外观并且特定文件的消失,那么filesystemwatcher可以帮助您检测这两个事件。

否则请记住在检测到文件删除时手动重新启动计数器。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用System.Windows.Forms.Timer,因此您不必担心跨线程。以下是使用秒表课程的简单示例:

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();
}