0

重複の可能性:
C# でこのタイマーを有効にするにはどうすればよいですか?

小さなプロジェクトを実行しようとしています。ブレークポイントを使用すると、コードは正しく処理されますが、プログラムを通常の速度で実行すると、シーケンスの実行速度が速すぎます。信号機のシーケンスを 1 秒ごとに変更しようとしています。このコードの何が問題になっていますか? あなたが興味を持っている場合に備えて、信号機の単純なシーケンスです:)。初心者プロジェクト。

    }
        public int counter = 0;

    private void rbStart_CheckedChanged(object sender, EventArgs e)
    {
        Light_timer.Start();
        counter++;

        if (counter == 1)
        {
            pbRed.Visible = true;
            pbAmber.Visible = false;
            pbGreen.Visible = false;
        }
        else if (counter == 2)
        {
            pbRed.Visible = true;
            pbAmber.Visible = true;
            pbGreen.Visible = false;
        }
        else if (counter == 3)
        {
            pbRed.Visible = false;
            pbAmber.Visible = false;
            pbGreen.Visible = true;
        }
        else if (counter == 4)
        {
            pbRed.Visible = false;
            pbAmber.Visible = true;
            pbGreen.Visible = false;
        }
        else if (counter == 5)
        {
            pbRed.Visible = true;
            pbAmber.Visible = false;
            pbGreen.Visible = false;
        }
        else
        {
            counter = 0;
        }
    }

    private void rbStop_CheckedChanged(object sender, EventArgs e)
    {

        pbRed.Visible = false;
        pbAmber.Visible = false;
        pbGreen.Visible = false;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Light_timer.Tick += new EventHandler(rbStart_CheckedChanged);
        Light_timer.Interval = 1000;
        Light_timer.Stop();
    }

}

}

4

1 に答える 1

3

タイマーが経過するたびにイベントハンドラーを接続しています...これを試してください:

private void Form1_Load(object sender, EventArgs e)
{
    Light_timer = new Timer();
    Light_timer.Tick += new EventHandler(TimerElapsed);
    Light_timer.Interval = 1000;
}

private void TimerElapsed(object sender, EventArgs e)
{
    counter++;

    if (counter == 1)
    {
        pbRed.Visible = true;
        pbAmber.Visible = false;
        pbGreen.Visible = false;
    }
    else if (counter == 2)
    {
        pbRed.Visible = true;
        pbAmber.Visible = true;
        pbGreen.Visible = false;
    }
    else if (counter == 3)
    {
        pbRed.Visible = false;
        pbAmber.Visible = false;
        pbGreen.Visible = true;
    }
    else if (counter == 4)
    {
        pbRed.Visible = false;
        pbAmber.Visible = true;
        pbGreen.Visible = false;
    }
    else if (counter == 5)
    {
        pbRed.Visible = true;
        pbAmber.Visible = false;
        pbGreen.Visible = false;
    }
    else
    {
        counter = 0;
        Light_timer.Stop();
    }
}

private void rbStart_CheckedChanged(object sender, EventArgs e)
{
    Light_timer.Start();
}

private void rbStop_CheckedChanged(object sender, EventArgs e)
{
    Light_timer.Stop();
    pbRed.Visible = false;
    pbAmber.Visible = false;
    pbGreen.Visible = false;
}
于 2012-10-06T23:36:04.753 に答える