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