为什么int步会改变?

问题描述 投票:0回答:1

我的代码有问题:

    System.Windows.Forms.Timer Timer1 = new System.Windows.Forms.Timer();

    int TimeCount;

    private void button1_Click(object sender, EventArgs e)
    {
        Timer1.Interval = 1000;
        Timer1.Enabled = true;
        TimeCount = 0;
        Timer1.Tick += new EventHandler(TimerEventProcessor);
    }

    private void TimerEventProcessor(Object sender, EventArgs myEventArgs)
    {
        TimeCount = TimeCount + 1;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Timer1.Enabled = false;
        TimeCount = 0;
    }

在第一次运行时,TimeCount将很好地执行步骤(1,2,3,4,5,....]

但是如果i button2停止,然后button1重新启动,则TimeCount步骤将执行(2,4,6,8,10,...)

然后如果我重复操作步骤将做(3,6,9,....)

如何使我的TimeCount int始终正确执行(1,2,3,4,5,....)?

c# timer int
1个回答
1
投票

这与事件处理程序委托的使用方式有关:

Timer1.Tick += new EventHandler(TimerEventProcessor);

这会将新处理程序(TimerEventProcessor)添加到Tick持有的委托方法列表中。因此,在每个刻度上,事件将循环遍历已注册的处理程序,并依次调用它们。

如果两次向Tick添加一个方法,它将被调用两次。将其添加三遍,它将被调用三遍,依此类推。每次单击button1时,都会在列表中添加另一个处理程序。

我建议将Timer1.Tick += new EventHandler(TimerEventProcessor);移至加载事件(例如Form_Load)或构造函数(public Form1())。您只需要注册处理程序once

或者,在button2中,注销处理程序:

Timer1.Tick -= new EventHandler(TimerEventProcessor);
© www.soinside.com 2019 - 2024. All rights reserved.