一个参数: Thread.Start方法可以带一个参数: public static void Main() 多个参数: 1、将线程执行过程封装成一个类,将使用到的参数设置为类的变量或属性。使用时,将先声明并实体化一个执行类,并将其属性赋值,然后再创建线程调用其执行方法。 public static void Main() 2、使用委托 private static void Main() { Thread thread = new Thread(new ThreadStart(delegate{ Flash(a,b); })); thread.IsBackground = true; thread.Start(); //线程 执行单线程 #region private void button1_Click(object sender, EventArgs e) { //ThreadStart ts = new ThreadStart(method); //Thread t = new Thread(ts); Thread t = new Thread(method); //线程默认是前台线程,一个进程退出标志 所有的前台线程都结束之后, t.IsBackground = true; //线程的优先级 后台进程不会阻止 进程的推出 t.Priority = ThreadPriority.Highest; t.Start(); } int memo; public void method() { DateTime beginTime = DateTime.Now; for (int i = 0; i <= 50; i++) { memo += i; Thread.Sleep(1000); } TimeSpan ts = DateTime.Now.Subtract(beginTime); MessageBox.Show("执行完毕!!" + ts.TotalMilliseconds); } #endregion //Invoke()的作用是:在应用程序的主线程上执行指定的委托。 //1、Invoke会阻止当前主线程的运行;BeginInvoke不会阻止当前主线程的运行,而是等当前主线程做完事情之后再执行BeginInvoke中的代码内容。 // 2、这2个方法都是由主线程运行的,并不是异步执行,如果代码耗时过长,同样会造成界面卡死 #region private delegate void myIncreaseHandle(bool _b); //申明一个委托 private void btnStrat_Click(object sender, EventArgs e) { Thread t = new Thread(threadmethod); t.IsBackground = true; t.Priority = ThreadPriority.Highest; t.Start(); string aa = "123"; } private void threadmethod() { this.Invoke(new myIncreaseHandle(myEventIncreaseHandle), new object[] { false }); } private void myEventIncreaseHandle(bool _b) { this.btnStrat.Enabled = _b; } #endregion //双色球案例 List<Label> lblist = new List<Label>(); private Thread threadStart; private bool isRuning = false; //启动运行标识 private void frmProgress_Load(object sender, EventArgs e) { for (int i = 0; i < 6; i++) { Label lb = new Label(); lb.Text = "0"; lb.BackColor = Color.Transparent; lb.AutoSize = true; lb.Location = new Point(50*i+50,100); this.Controls.Add(lb); lblist.Add(lb); } } private void button3_Click(object sender, EventArgs e) { isRuning = true; Thread thread1 = new Thread(threadMethod); thread1.IsBackground = true; thread1.Start(); threadStart = thread1; } private delegate void myIncreaseHandle(Label lab ,string e); //申明一个委托 private void threadMethod() { Random r = new Random(); while (isRuning) { foreach (Label item in lblist) { string str=r.Next(0, 10).ToString(); if (item.InvokeRequired) { item.Invoke(new myIncreaseHandle(myEventIncreaseHandle), new object[] { item,str }); } else { item.Text = str; } } Thread.Sleep(100); } } private void myEventIncreaseHandle(Label lab ,string e) { lab.Text = e; } private void btnStop_Click(object sender, EventArgs e) { isRuning = false; } |
|
来自: 时间剧毒 > 《第二十六章:委托 线程》