主界面有一个button1的button和一个label1的label,还是很好理解的,下次有空再写一下异步的实现 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace sleep { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //设置一个buuton触发 private void button1_Click(object sender, EventArgs e) { //点击button1设其label1的值为1 label1.Text = "1"; //新建一个线程,设置为后台线程. Thread s = new Thread(change); s.IsBackground = true; s.Start(); } //定义一个委托用于跨线程访问方法 delegate void changeLbl(string str); //访问主线程 private void ChangeLbl(string str) { 是否必须调用 Invoke 方法 //if (this.InvokeRequired) //{ //invoke调用主线程 this.Invoke(new changeLbl(ChangeText), str); //} //else //{ //设置主线程[界面]的值 // label1.Text = str; //} } //设置主线程[界面]的值 private void ChangeText(string str) { label1.Text = str; } //让线程sleep一段时间 private void change() { Thread.Sleep(2*1000); //访问主线程 ChangeLbl("2"); } } } 运行效果就不用说了吧: 点击button,label1的text变成1,sleep(2*1000)毫秒,后变成2.