【winform】我想点击button1让Label上显示从0,1,2,3,……,10000000
程序是这样写的:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace doevent{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i <=10000000; i++) { label1.Text = i.ToString(); } } }}
for (int i = 0; i <=10000000; i++){ label1.Text = i.ToString(); Application.DoEvents(); Thread.Sleep(10);}
[解决办法]
{
Thread.Sleep(1);
if (this.label1.InvokeRequired)
{
InvokeCallback msgCallback = new InvokeCallback(msgEvent);
label1.Invoke(msgCallback, new object[] { i.ToString() });
}
else
{
label1.Text = msg;
}
}
}
private void msgEvent(string msg)
{
label1.Text = msg;
}
[解决办法]
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <=10000000; i++)
{
label1.Text = i.ToString();
}
}
注意生命周期的问题!只要按下便开始循环,直到循环结束button1_Click函数才完成。当然程序会......
[解决办法]
用Timer
因为 for 循环速度太快了,只有执行完了
最后显示1000000
[解决办法]
private int _Index = 0;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 1;
timer1.Enabled = true;
}
void timer1_Tick(object sender, EventArgs e)
{
label1.Text = _Index.ToString();
_Index++;
}