为什么 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);
我的代码有问题:
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);