1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using System.Threading;
10
11 namespace WindowsFormsApplication1
12 {
13 public partial class MainForm : Form
14 {
15 public MainForm()
16 {
17 InitializeComponent();
18 }
19
20 delegate void SetMsg(string msg);
21 //private void SetMsgInfo(string msg)
22 //{
23 // this.textBox1.Text = msg;
24 //}
25
26 private void button1_Click(object sender, EventArgs e)
27 {
28 Thread thread = new Thread(M1);
29 thread.Start();
30 }
31
32 void M1()
33 {
34 for (int i = 0; i < 10; i++)
35 {
36 //this.Invoke(new SetMsg(SetMsgInfo), new object[] { i.ToString() });
37 this.Invoke(new SetMsg((o) => { this.textBox1.Text = o; }), new object[] { i.ToString() });//匿名方法不懂的可以去查一下。
38 Thread.Sleep(500);
39 }
40 }
41 }
42 }
=================================================================================
这段代码如果使用以后的代码去替换,也可以达到每秒变换this.label1.Text的目的,但是这个用户体验却很差:在变化值时,窗体不能移动。用上面的方法可以避开这个问题。
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
this.label1.Text = i.ToString();
this.Update();
Thread.Sleep(1000);
}
}