0

ユーザーがボタンを押すと、3秒ごとにコントローラーにコマンドを送信する形式でタイマーを使用しています。ユーザーが同じボタンをもう一度押すと、タイマーが停止するはずです。しかし、私の場合、タイマーは止まりません。私は次のようにタイマーを使用しています。

private void autoModeTempBtn_Click(object sender, EventArgs e)
    {
        System.Timers.Timer tempTimer = new System.Timers.Timer(3000);
        tempTimer.SynchronizingObject = this;
        tempTimer.AutoReset = true;

        if (autoModeTempBtn.Text == "Get Temperature Auto Mode")
        {
            autoModeTempBtn.Text = "hello";

            tempTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTemperatureEvent);
            tempTimer.Enabled = true;
        }
        else /*user presses button second time */
        {
            tempTimer.Stop();
            tempTimer.AutoReset = false;
            tempTimer.Enabled = false;
            autoModeTempBtn.Text = "Get Temperature Auto Mode";
        }
    }
    private void OnTemperatureEvent(object source, System.Timers.ElapsedEventArgs e)
    {
       //do something
    }

どこで間違いを犯していますか?

4

1 に答える 1

3

ボタンをクリックするたびに新しいタイマーを作成しています。タイマーを一度作成し、クリックするたびに開始/停止するだけです。また、 のSystem.Windows.Forms.Timer代わりに を使用する必要がありSystem.Timers.Timerます。

var _timer = new Timer() { Interval = 3000 };

private void autoModeTempBtn_Click(object sender, EventArgs e)
{
    if (!validateSerialNumber())
        return;

    if (!_timer.Enabled)
    {
        _timer.Start();
        autoModeTempBtn.Text = "hello";
    }
    else
    {
        _timer.Stop();
        autoModeTempBtn.Text = "Get Temperature Auto Mode";
    }
}

そして、このコードをコンストラクターに追加します。

_timer.Tick += OnTemperatureEvent;
于 2013-11-02T10:46:44.267 に答える