C# winform中timer的问题
privatevoidForm1_Load(objectsender,EventArgse){this.timer1.Enabled=true;this.timer1.I...
private void Form1_Load(object sender, EventArgs e)
{
this.timer1.Enabled = true;
this.timer1.Interval = 1000;
this.timer1.Tick += new EventHandler(this.timer1_Tick);
this.timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
m = m + 1;
textBox1.Text = m.ToString();
}
本来想做一个1s钟的计时器,可是加上 this.timer1.Tick += new EventHandler(this.timer1_Tick)每次就加2S,这是怎么回事 展开
{
this.timer1.Enabled = true;
this.timer1.Interval = 1000;
this.timer1.Tick += new EventHandler(this.timer1_Tick);
this.timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
m = m + 1;
textBox1.Text = m.ToString();
}
本来想做一个1s钟的计时器,可是加上 this.timer1.Tick += new EventHandler(this.timer1_Tick)每次就加2S,这是怎么回事 展开
展开全部
你好,因为你的事件进行了重复的绑定。
绑定了2次到timer1_Tick函数上,所以每过一秒就运行2次。
当你把这个控件拖到界面上,并进行双击的时候,就已经绑定了一次事件了。
所以你Form1_Load代码里的那句
this.timer1.Tick += new EventHandler(this.timer1_Tick);
是不需要的。删掉后,另一句会正常工作。
另外一句是写在窗体的designer.cs里面的。
你在designer.cs里搜索“timer1.Tick”可以发现他。
谢谢采纳
绑定了2次到timer1_Tick函数上,所以每过一秒就运行2次。
当你把这个控件拖到界面上,并进行双击的时候,就已经绑定了一次事件了。
所以你Form1_Load代码里的那句
this.timer1.Tick += new EventHandler(this.timer1_Tick);
是不需要的。删掉后,另一句会正常工作。
另外一句是写在窗体的designer.cs里面的。
你在designer.cs里搜索“timer1.Tick”可以发现他。
谢谢采纳
更多追问追答
追问
可是我不删除this.timer1.Tick += new EventHandler(this.timer1_Tick),把textBox1.Text = m.ToString()换成MessageBox(m.ToString());就可以正常加上去,这是又是怎么回事?
追答
这是因为MessageBox是一个会阻塞主线程的函数。
MessageBox会弹出一个模式对话框,直到你按下确定之前,程序都不会运行,会卡住。
然而。
每当过一秒的时候,你的timer1_Tick函数会执行两次。
每一次都是+1.
但是每次+1之后都会显示MessageBox,所以你看到的是连续的变化
1,2,3,4,5,6
当你采用textBox1.Text = m.ToString()时。
结果会直接显示到textBox1上,由于执行两次是在极短的时间内发生的(可以视为同时,但是计算机是没有绝对的同时的),所以你看到的是+2的变化。但实际上还是每次+1,只是每秒执行2次。
1,3,5。
明白了么。
展开全部
你去掉this.timer1.Tick += new EventHandler(this.timer1_Tick); 这一句,直接给timer1的Trick事件赋值试试;感觉应当是Trick执行了2次。
追问
执行了两次的话也应该会显示一下变化的过程吧?上面那个程序只显示1,3,5……
追答
你可以在后面加一句sleep试试:
private void timer1_Tick(object sender, EventArgs e)
{
m = m + 1;
textBox1.Text = m.ToString();
System.Threading.Thread.Sleep(1000);//这样就可以看到过程了
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
界面和代码注册事件不要同时使用,这是个不好的习惯,谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询