C# 定时器-需要帮助禁用定时器,直到代码执行,然后重新启动定时器。当前最大CPU:(

C# 定时器-需要帮助禁用定时器,直到代码执行,然后重新启动定时器。当前最大CPU:(,c#,timer,cpu,C#,Timer,Cpu,基本上,我有一个问题,这个定时器程序,我试图放在一起。在启动程序时,它将使用一个稳定的25%的CPU,我不介意,但每次定时器启动,它会增加另一个25%的CPU,所以在第四关我完全最大化了 我想我没有在定时器启动后正确地处理它,但我对c#还不熟悉,也不知道该怎么做 我的课程范围基本上是: 执行一些程序-一旦完成启动计时器 等待计时器结束,然后再次启动程序,禁用计时器直到完成 任何帮助都将不胜感激:) 下面的ok修订版-简化并排除了ip检查,因此它现在只显示一个消息框-这将不再执行:( 您可能正

基本上,我有一个问题,这个定时器程序,我试图放在一起。在启动程序时,它将使用一个稳定的25%的CPU,我不介意,但每次定时器启动,它会增加另一个25%的CPU,所以在第四关我完全最大化了

我想我没有在定时器启动后正确地处理它,但我对c#还不熟悉,也不知道该怎么做

我的课程范围基本上是:

  • 执行一些程序-一旦完成启动计时器
  • 等待计时器结束,然后再次启动程序,禁用计时器直到完成
任何帮助都将不胜感激:)

下面的ok修订版-简化并排除了ip检查,因此它现在只显示一个消息框-这将不再执行:(


您可能正在寻找类似以下内容:

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
}

我不想退出,为什么你有cpu负载,但我会:

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    ((Timer)source).Enabled = false;
    IpCheck();
    ((Timer)source).Enabled = true;
}
并且不要在方法调用中处理计时器

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;


}

未测试未编译,只是一个示例我将在您的位置执行的操作,所有添加的行都在那里,没有选项卡

问题是他在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
就说

EnableTimer();
//or
this.EnableTimer();

你不需要实例化你正在使用的类,因为它已经被实例化了。

你的问题没有显示在发布的代码中。你几乎可以肯定在
IpCheck()中有一个无限循环
。让我猜猜,您在一台4核机器上,这就是为什么每次通过都会给CPU增加25%——每次通过都会以100%的速度消耗整个内核。但是,这表明您正在启动新的线程,这在代码中也没有显示。如上所示的简化操作只输出一个消息框,并且仍然会遇到相同的问题th CPU:(tTimer是一个计时器1,它创建另一个tTimer,它创建另一个tTimer等…获取消息“'Object'不包含'Enabled'的定义,并且找不到接受'Object'类型的第一个参数的扩展方法'Enabled'。”但这似乎符合我的想法-有什么建议吗?aTimer需要是类级别的成员,atm是EnableTimer方法的本地成员感谢这似乎最终为我解决了问题,cpu问题是计时器对象的重新创建,所以我对所有内容进行了一点重构,现在它工作得很好-谢谢如需帮助:)
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();