簡單的多線程:
protected void Page_Load(object sender, EventArgs e) { ParameterizedThreadStart _ParameterizedThreadStart = new ParameterizedThreadStart(MyMethod); Thread t = new Thread(_ParameterizedThreadStart); object o = "sdfsf"; t.Start(o); } private void MyMethod(object o) { //執行任務
}
使用委托的多線程:
public partial class Demo : Form { public Demo() { InitializeComponent(); } //定義委托 delegate void MyDelegate(string str); //聲明委托 MyDelegate _MyDelegate; //聲明線程 private Thread t; private void Demo_Load(object sender, EventArgs e) { //給函數指定委托 _MyDelegate = new MyDelegate(SetLblTxt); } //執行委托 private void Run() { while (true) { lblShow.Invoke(_MyDelegate, new object[] { Guid.NewGuid().ToString() }); Thread.Sleep(100); } } //設定lable的text private void SetLblTxt(string o) { this.lblShow.Text = o.ToString(); } private void btnBegin_Click(object sender, EventArgs e) { t = new Thread(new ThreadStart(Run)); t.Start(); } private void Demo_FormClosing(object sender, FormClosingEventArgs e) { //終止線程 if (t.IsAlive) { t.Abort(); } } }
有返回值的多線程:
//定義委托 delegate string MyDelegate(string str); //聲明委托 MyDelegate _MyDelegate; //聲明線程 private Thread t; private void Demo_Load(object sender, EventArgs e) { //給函數指定委托 _MyDelegate = new MyDelegate(SetLblTxt); } //執行委托 private void Run() { object o = new object(); while (true) { lock (lblShow) { //lblShow.Invoke(_MyDelegate, new object[] { Guid.NewGuid().ToString() }); //其實是同步調用 IAsyncResult result = lblShow.BeginInvoke(_MyDelegate, new object[] { Guid.NewGuid().ToString() }); //異步調用 MessageBox.Show(lblShow.EndInvoke(result).ToString()); //獲得返回值 Thread.Sleep(1000); } } } //設定lable的text private string SetLblTxt(string o) { this.lblShow.Text = o.ToString(); return o.ToString(); } private void btnBegin_Click(object sender, EventArgs e) { t = new Thread(new ThreadStart(Run)); t.Start(); } private void Demo_FormClosing(object sender, FormClosingEventArgs e) { //終止線程 if (t == null) return; if (t.IsAlive) { t.Abort(); } }