using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;
namespace _08_搖獎機{ //創建六個invoke方法(控件調用的時候的委托,用來給lable控件賦值) public delegate void MyDelegate1(int num); public delegate void MyDelegate2(int num); public delegate void MyDelegate3(int num); public delegate void MyDelegate4(int num); public delegate void MyDelegate5(int num); public delegate void MyDelegate6(int num); public partial class Form1 : Form { public MyDelegate1 md1; public MyDelegate1 md2; public MyDelegate1 md3; public MyDelegate1 md4; public MyDelegate1 md5; public MyDelegate1 md6; //此委托用來作異步委托,旨在讓clr自動創建另一個線程來完成主線程要做的操作,以緩解主線程的壓力 public delegate void MyDelegate(bool b); public Form1() { InitializeComponent(); md1 = SetLable1; md2 = SetLable2; md3 = SetLable3; md4 = SetLable4; md5 = SetLable5; md6 = SetLable6; } //用來存放子線程對象 PRivate Thread nameThread; private int id; private void button1_Click(object sender, EventArgs e) { MyDelegate md = new MyDelegate(this.SetNumberData);; if (button1.Text.Trim()=="開始") { button1.Text = "停止"; //調用異步委托,就是在另一個線程中執行此委托綁定的方法 IAsyncResult result = md.BeginInvoke(true,null, null); } else { button1.Text = "開始"; //停止的話就相當于終止子線程 nameThread.Abort(); } //首先要想清楚 要給主線程的空間lable賦值,那么就必須是主線程干的事 //md.EndInvoke(result); }
public void SetNumberData(bool b) { while (b==true) { List<int> listNum = new List<int>(); Random random = new Random(); //隨機生成6個數 while (listNum.Count <= 6) { int n = random.Next(0, 10); listNum.Add(n); } //不是創建此控件的線程調用此控件的時候就必須調用invoke方法 if (this.label1.InvokeRequired) { this.Invoke(md1, listNum[0]); } else { label1.Text = listNum[0].ToString(); } if (this.label2.InvokeRequired) { this.Invoke(md2, listNum[1]); } else { label2.Text = listNum[1].ToString(); } if (this.label3.InvokeRequired) { this.Invoke(md3, listNum[2]); } else { label3.Text = listNum[2].ToString(); } if (this.label4.InvokeRequired) { this.Invoke(md4, listNum[3]); } else { label4.Text = listNum[3].ToString(); } if (this.label5.InvokeRequired) { this.Invoke(md5, listNum[4]); } else { label5.Text = listNum[4].ToString(); } if (this.label6.InvokeRequired) { this.Invoke(md6, listNum[5]); } else { label6.Text = listNum[5].ToString(); } //記錄下當前的線程對象,以便于在點擊停止按鈕的時候終止此線程 nameThread = Thread.CurrentThread; Thread.Sleep(300); } //id=Thread.CurrentThread.ManagedThreadId; }
public void SetLable1(int n) { label1.Text = n.ToString(); } public void SetLable2(int n) { label2.Text = n.ToString(); } public void SetLable3(int n) { label3.Text = n.ToString(); } public void SetLable4(int n) { label4.Text = n.ToString(); } public void SetLable5(int n) { label5.Text = n.ToString(); } public void SetLable6(int n) { label6.Text = n.ToString(); } }}

新聞熱點
疑難解答