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

本文关键字:计时器 然后 重新启动 CPU 执行 帮助 代码 | 更新日期: 2023-09-27 18:37:04

基本上,我正在尝试组合的这个计时器程序有问题。启动程序时,它将使用稳定的 25% CPU,我不介意,但每次计时器触发时,它都会在 CPU 上增加另外 25%,因此在第 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");
    }
}

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

您可能正在寻找类似这样的东西:

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;
}

并且不要在方法调用中释放计时器。

问题是他在 Timer1 类中创建了一个 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();

您不需要实例化您正在使用的类,就其而言,它已经实例化了。

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;

}

测试未编译,只是一个示例,我会在您的位置上做什么,所有添加的行都在那里,没有选项卡