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 WindowsFormsApplication112 {13 public partial class MainForm : Form14 {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); } }