我有一个关于我在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();
}
Run Code Online (Sandbox Code Playgroud)
这是经过的代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
你可以看到它很简单,但我想知道是否有更有效的方法来做到这一点.我假设计时器没有正确处理或者那种效果.
有任何想法吗?
您不必再次启动另一个计时器.您设置的那个将Elapsed每Interval毫秒触发一次事件,除非您调用Stop()方法.
如果
Enabled设置为true并AutoReset设置为false,则仅在第一次间隔过去时将事件Timer提升Elapsed一次.如果Enabled是true和AutoReset是true,将Timer继续提高在指定的时间间隔经过的事件.
默认为AutoResetis true,所以第二句描述了你的情况.
您当前的代码Timer每50秒启动一次,而不会停止或删除旧代码.这就是你获得高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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |