要实现的效果是:
点击按纽,窗口上的label上出现1~100数字的变化。
窗口上有两个控键,一个label,一个button。
第一个实例(把窗口上的label上文字改成100):
using System; using System.Windows.Forms; namespace ThreadTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label1.Text = "100"; } } }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
这个是最简单的实例,应该不难看懂。
第二个实例(点击button,循环显示0动态变化到100数字):
using System; using System.Windows.Forms; namespace ThreadTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label1.Text = "0"; } private void button1_Click(object sender, EventArgs e) { for(int i=0;i<101;i++) { label1.Text = i.ToString(); } } } }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
运行一下,点击一下button1,没有看到0~100动态变化,就直接到了100了。
原因:因为你的处理器速度太快了,就只能看到最后的结果,那么,怎样才能看到中间过程呢?
我们先用函数的方式来实现上面的功能
写个名为run的函数吧:
private void run() { for(int i=0;i<101;i++) { label1.Text = i.ToString(); } }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
这样就可以直接调用run函数实现功能了,而不用在事件函数内写代码。(这样做是有好处的)
整个代码如下:
第三个实例(使用函数)
using System; using System.Windows.Forms; namespace ThreadTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label1.Text = "0"; } private void button1_Click(object sender, EventArgs e) { run(); //调用run函数 } private void run() { for(int i=0;i<101;i++) { label1.Text = i.ToString(); } } } }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
这里就需要在循环过程中加延时了,假定我们每隔1s的延时,lable1的值增加1。
方法有很多,我们就用一个timer来实现延时。
添加一个timer, 命名为timer1,在timer1的tick事件内添加语句,改变label1的值。(Tick事件是每经过指定时间间隔后被触发)
第四个实例(使用timer),实现每隔1s的延时,lable1的值增加1,以达到动态变化的效果
using System; using System.Windows.Forms; namespace ThreadTest { public partial class Form1 : Form { int i; //全局变量i public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label1.Text = "0"; } private void button1_Click(object sender, EventArgs e) { run(); } private void run() { i = 0; timer1.Interval = 1000; //设置timer1的间隔时间 timer1.Start(); //启动timer1 } private void timer1_Tick(object sender, EventArgs e) //timer1的Tick事件 { i++; if (i > 100) { timer1.Stop(); } label1.Text = i.ToString(); } } }(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
同样的,我们运行一下,看看结果,很好,我们能够看到0~100循环的过程了。
以上是我们平常的做法,让label动态变化的效果,下面我们开始使用线程来实现上面的功能。