基本上我对这个计时器程序有问题,我试图把它放在一起。在启动程序时,它将使用一个稳定的25%CPU,我不介意,但每次计时器启动它再加上25%的CPU,所以在第4遍我完全最大化。
我认为它在发射后我没有正确处理掉计时器,但我不熟悉c#并且不确定如何解决这个问题。
我的计划的应对基本上是:
任何帮助将不胜感激:)
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
IpCheck();
}
private static void EnableTimer()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
// Set the Interval to x seconds.
aTimer.Interval = 10000;
aTimer.Enabled=true;
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = false;
aTimer.Dispose();
}
下面的修改版本 - 简化并排除了ip检查所以它现在所做的只是显示一个消息框 - 这甚至不再执行:(
public class Timer1
{
System.Timers.Timer aTimer = new System.Timers.Timer();
public static void Main()
{
Timer1 tTimer = new Timer1();
tTimer.EnableTimer();
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Enabled = false;
MessageBoxPrint();
aTimer.Enabled = true;
}
private void EnableTimer()
{
// Set the Interval to x seconds.
aTimer.Interval = 10000;
aTimer.Enabled=true;
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
}
public static void MessageBoxPrint()
{
MessageBox.Show("Testing");
}
}
答案 0 :(得分:2)
你可能正在寻找这样的东西:
private static System.Timers.Timer aTimer = new System.Timers.Timer();
// This method will be called at the interval specified in EnableTimer
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Enabled = false; // stop timer
IpCheck();
aTimer.Enabled = true; // restart timer so this method will be called in X secs
}
private static void EnableTimer()
{
// Set the Interval to x seconds.
aTimer.Interval = 10000;
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled=true; // actually starts timer
}
答案 1 :(得分:0)
我不退出get,为什么你有cpu加载,但我会这样做:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
((Timer)source).Enabled = false;
IpCheck();
((Timer)source).Enabled = true;
}
并且不要在方法调用中处理计时器。
答案 2 :(得分:0)
static System.Timers.Timer aTimer = new System.Timers.Timer();
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Enabled=false;
IpCheck();
aTimer.Enabled=true;
}
private static void EnableTimer()
{
// Set the Interval to x seconds.
aTimer.Interval = 10000;
aTimer.Enabled=true;
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
}
private static void DisableTimer()
{
aTimer.Elapsed -= new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = false;
}
没有测试没有编译,只是一个示例我会在你的位置做什么,所有添加的行没有没有标签
答案 3 :(得分:0)
问题是他正在Timer1类中创建一个Timer1,所以当你加载Timer1时,它会加载另一个Timer1,它会加载另一个加载的timer1 ......它认为你得到它
public class Timer1
{
System.Timers.Timer aTimer = new System.Timers.Timer();
public static void Main()
{
Timer1 tTimer = new Timer1();//<-this line right here is killing you
//remove it, as I don't see anyuse for it at all
然后在这一行
tTimer.EnableTimer();
只是说
EnableTimer();
//or
this.EnableTimer();
您不需要实例化您正在使用的类,只要它涉及它已经实例化。