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

时间:2012-06-14 10:08:35

标签: c# timer cpu

基本上我对这个计时器程序有问题,我试图把它放在一起。在启动程序时,它将使用一个稳定的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");
    }
}

4 个答案:

答案 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();

您不需要实例化您正在使用的类,只要它涉及它已经实例化。