【C#】按钮和timer 冲突,只运行按钮,等按钮运行完了才运行timer

private void button1_Click(object sender, EventArgs e)
{
Hello.StartOrStop = 0;
for (int i = 0; i < 10000; i++)
{
a += Convert.ToDouble(textBox2.Text);
Console.WriteLine(a);

}
Hello.StartOrStop = 1;
Hello.GATalbe = " ";

}
private void timer2_Tick(object sender, EventArgs e)
{
textBox1.Text = Convert.ToString(a);
}
设置timer2的interval为10毫秒,我停止程序进行逐条观测,发现程序是先进行button中的代码,直到算完才进行timer2,所以无法将变量a的数值实时在textBox中显示出来。
求解答~~

如果你所说timer2是每10毫秒钟运行一次,它一定是执行了,如果是你debug只是看到了程序执行的片面过程,而不是全面过程,所以你下的结论判断也一定是片面而不准确的。其实timer的debug调试一直以来是程序员头痛的事情,建议你将控制台作为一个日志类型的输出。将button1_click1事件对变量a的变化和timer2对a变量的变化全部依次输出到控制台中。同时建议你将timer2的interval调整为秒级别这样便于观察。其实如此修改后,你会在控制台中看到你所想看到的全部,这样你就理解了。代码修改如下:
private void button1_Click(object sender, EventArgs e)
{
Hello.StartOrStop = 0;
for (int i = 0; i < 10000; i++)
{
a += Convert.ToDouble(textBox2.Text);
Console.WriteLine(“button1_Click-->a=”+a.tostring());
Console.WriteLine(“button1_Click-->textBox1=”+textBox1.text);

}
Hello.StartOrStop = 1;
Hello.GATalbe = " ";

}
private void timer2_Tick(object sender, EventArgs e)
{
textBox1.Text = Convert.ToString(a);
Console.WriteLine(“timer2_Tick-->a=”+a.tostring());
Console.WriteLine(“timer2_Tick-->textBox1=”+textBox1.text);
}

由此你可以知道到底是a变量的问题还是textBox1.Text 显示的刷新问题。那里有问题处理那里。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-12
那就开个线程吧。用现成来做timer控件做的事追问

请问大侠~~怎么开线程啊,求大侠辛劳写个简单的小例子吧~~~~~谢谢大侠~~

本回答被提问者采纳
第2个回答  2012-08-12
你要让timer中的运行休眠
就是this.sheep();
Text中就应该会显示了

【C#】按钮和timer 冲突,只运行按钮,等按钮运行完了才运行timer
如果你所说timer2是每10毫秒钟运行一次,它一定是执行了,如果是你debug只是看到了程序执行的片面过程,而不是全面过程,所以你下的结论判断也一定是片面而不准确的。其实timer的debug调试一直以来是程序员头痛的事情,建议你将控制台作为一个日志类型的输出。将button1_click1事件对变量a的变化和timer2对...

C# Timer 运行后窗体卡住不动,等很久代码运行完之后才恢复
timer1.enable=true;\/\/执行完操作,再启动 }

C#新手关于Timer的代码问题,点击按钮没有反应
计时器是个周期控件,就是要指定他每过多少时间执行一次,你这个用法纯粹跟没用计时器一样了,而且也不对,你要显示时间,可以把计时器设置为每秒执行一次,这样自然每次执行都是过了一秒钟了,你在用这个逻辑来写代码才行,你那个写法也根本没法计时,每次循环的间隔时间比一秒可是小很多了,根本没法...

C#.net(form) 卡死问题,用了,timer定时执行一个方法,短时间后卡死!
原因是你的处理占用了大量处理时间,导致Timer无法继续执行。

C#按钮事件调用TIMER?
在两个按钮单击事件中分别写Timer的Start和Stop方法。Timer的Tick或者Elapsed事件不用管,该什么逻辑就什么逻辑

c#中butten按钮只执行一次命令,我用button1.Enabled = false; ; 这个...
这里好像是毫秒为单位的。)然后双击该控件。protected void Timer1_Tick(object sender, EventArgs e){ button1.Enabled = true;\/\/这里是把button1变成可用的。Timer1.Enabled = false;\/\/这个是让Timer控件停止的,不然你会一直不停的执行这段代码。} ...

c# timer停止不了,请问如何解决
timer的作用域不对,你是在button事件里创建的不能再外面用

C#多个timer同时运行
Timer,其实是使用了线程的异步调用,既然线程,可以并发,那么Timer肯定是可以同时调用Start()的。

c#窗体timer事件触发时连续执行了两次才跳出,closing事件也是
private void timer1_Tick(object sender, EventArgs e){ timer1.enabled=false; \/\/触发timer1后立即设置属性enabled=false就不会再次执行了,但不影响当次timer1的执行内容 flag = int.Parse(Class1.ContextData["outID"].ToString());dsoutID = cl.ds(str);flag1 = int.Parse(dsoutID....

为什么C#中timer控件没反应
不建议你这么写。最好从工具箱里拖一个timer放到form1里面,从属性里面改名字为atime。这样编译器就把所有的属性,包括你能想到的,你想不到的,全部自动生成了代码。form1在加载的时候也把atime全部初始化好了,你就不用考虑细节。双击atime构件,加上atime触发时执行的代码。你使用的时候就只用规范...

相似回答