我对我在C#winforms应用中执行的计时器循环有疑问。每隔50秒,它应该检查系统上的时间,并将其与用户定义的时间进行比较。如果该时间与当前时间匹配,则执行该功能,否则返回计时器并再等50秒。我以为我的工作正常但是在离开应用程序后一夜之间我回来了,我的CPU是99%,它使用的是3.5gb内存。我检查了禁用的计时器,其余的应用程序运行正常,所以它必须与计时器。
这里是计时器代码:
public void day_timer()
{
System.Timers.Timer timer2 = new System.Timers.Timer();
timer2.Elapsed += new ElapsedEventHandler(daily_Elapsed);
timer2.Interval = 50000;
timer2.Enabled = true;
timer2.Start();
}
这是经过的代码:
private void daily_Elapsed(object sender, EventArgs e)
{
string time_rightmeow = DateTime.Now.ToString("hh:mm tt");
if (time_rightmeow != Configuration.Day_time)
{
day_timer();
}
else
{
day_backup();
}
}
你可以看到它非常简单,但我想知道是否有更有效的方法来做到这一点。我假设计时器没有正确处理或者那种效果。
任何想法?
答案 0 :(得分:6)
您不必再次启动另一个计时器。您设置的那个将每隔Elapsed
毫秒触发Interval
个事件,除非您调用Stop()
方法。
如果
的Enabled
设置为true
且AutoReset
设置为false
,则Timer
仅将Elapsed
事件提升一次,第一次间隔过去。 当Enabled
为true
且AutoReset
为true
时,Timer
会在指定的时间间隔内继续提升已失效事件。 < / p> 来自Timer.Start Method
AutoReset
的默认值为true
,因此第二句描述了您的情况。
您当前的代码每50秒启动一次新的Timer
,而不会停止或删除旧代码。这就是你获得高CPU和内存使用率的原因。
将daily_Elapsed
更改为:
private void daily_Elapsed(object sender, EventArgs e)
{
string time_rightmeow = DateTime.Now.ToString("hh:mm tt");
if (time_rightmeow == Configuration.Day_time)
{
day_backup();
}
}