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 test { public partial class FrmAddMsg : Form { public delegate void MyDel(string t); public FrmAddMsg() { InitializeComponent(); int TdId = Thread.CurrentThread.GetHashCode(); MessageBox.Show("UI线程ID为:" + TdId); } private void Display_Click(object sender, EventArgs e) { //创建ThreadStart类型委托对象Ts,指向Method方法 ThreadStart Ts = new ThreadStart(Method); //创建次线程对象Td,传递ThreadStart类型Ts Thread Td = new Thread(Ts); //尽快执行新线程 Td.Start(); } void GetTxt(string t) { //如果output控件的InvokeRequired值为false if (!this.txtOutput.InvokeRequired) { //获取并输出当前线程的ID值 int TdId = Thread.CurrentThread.GetHashCode(); MessageBox.Show("GetTxt方法正在执行,该方法所在线程ID为:" + TdId); //将t参数值赋值给output控件的Text属性 this.txtOutput.Text = t; } else { //调用output控件的Invoke方法,传递MyDel委托类型对象和t参数值 this.txtOutput.Invoke(new MyDel(GetTxt), t); } } void Method() { //获取并输出当前线程的ID值 int TdId = Thread.CurrentThread.GetHashCode(); MessageBox.Show("Method方法正在执行,该方法所在线程ID为:" + TdId); //当前线程阻塞4秒 Thread.Sleep(4000); //调用GetTxt方法,并传递input控件的Text属性值 string t = this.txtInput.Text; GetTxt(t); } private void MainTd_Click(object sender, EventArgs e) { //获取并输出当前主线程的ID值 int TdId = Thread.CurrentThread.GetHashCode(); MessageBox.Show("执行方法在主线程上,其线程ID为:" + TdId); //当前线程阻塞4秒 Thread.Sleep(4000); //调用GetTxt方法,并传递input控件的Text属性值 string t = this.txtInput.Text; Thread.Sleep(4000); GetTxt(t); } } }