为什么 int 步骤会改变?

Why does int steps change?

我的代码有问题:

    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,....)

但如果我让 button2 停止,然后让 button1 重新启动,TimeCount 步数将执行 (2,4,6,8,10,...)

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

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

您使用事件处理程序委托的方式存在问题:

Timer1.Tick += new EventHandler(TimerEventProcessor);

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

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

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

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

Timer1.Tick -= new EventHandler(TimerEventProcessor);