0

基本的に、私がまとめようとしているこのタイマープログラムに問題があります。プログラムを開始すると、私は気にしない安定した 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");
    }
}
4

4 に答える 4

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
}
于 2012-06-14T10:14:13.633 に答える
0

なぜあなたはCPU負荷を持っているのですか?

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    ((Timer)source).Enabled = false;
    IpCheck();
    ((Timer)source).Enabled = true;
}

メソッド呼び出しでタイマーを破棄しないでください。

于 2012-06-14T10:14:46.690 に答える
0

問題は、彼が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();

既にインスタンス化されている限り、作業中のクラスをインスタンス化する必要はありません。

于 2012-06-14T11:23:16.063 に答える
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;


}

テストされていませんコンパイルされていません。私があなたの場所で行うことの単なるサンプルです。追加されたすべての行はタブなしでそこにあります

于 2012-06-14T10:18:27.247 に答える