C# 多线程
//定义委托 ; 参数为方法名称 public delegate void UpdateLabel(string label); //control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。 //timeElapsedInstring 是UpdateUI方法的参数。 //lblStopWatch.Invoke(new UpdateLabel(UpdateUI), timeElapsedInstring); public bool IsCancelled { get; set; } public Form1() { InitializeComponent(); } private void UpdateUI(string labelText) { lblStopWatch.Text = labelText; } private void btnStart_Click(object sender, EventArgs e) { DateTime startTime = DateTime.Now; IsCancelled = false; Thread t = new Thread(() => { while (IsCancelled == false) //当IsCancelled 等于 false时 执行 { Thread.Sleep(1000); string timeElapsedInstring = (DateTime.Now - startTime).ToString(@"hh\:mm\:ss"); //lblStopWatch 是lable控件 lblStopWatch.Invoke(new UpdateLabel(UpdateUI), timeElapsedInstring); } }); t.Start(); } private void btnStop_Click(object sender, EventArgs e) { IsCancelled = true; }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace PlainOldThread { class Program { static void Main(string[] args) { SimpleThreadExample st = new SimpleThreadExample(); st.StartMultipleThread(); //调用对象下的方法 for (int i = 0; i < 100; i++) //主线程 每秒输出一行 111111111 { Thread.Sleep(1000); Console.WriteLine("我是主线程0.0000000000000000000"); Console.WriteLine(); } Console.ReadLine(); } } public class SimpleThreadExample { /* Start():启动线程; Sleep(int):静态方法,暂停当前线程指定的毫秒数; Abort():通常使用该方法来终止一个线程; Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; Resume():恢复被Suspend()方法挂起的线程的执行; */ bool lk = true; public void StartMultipleThread() { DateTime startTime = DateTime.Now; Thread t1 = new Thread(() => { while (true) { if (lk) { Thread.Sleep(20); //每1秒执行1次 Console.WriteLine("我是线程1.111111111111111111"); } } }); Thread t2 = new Thread(() => { while (true) { if (lk) { Thread.Sleep(20); //每1秒执行1次 Console.WriteLine("我是线程2.22222222222222222"); } } }); //parameterized thread //是参数 Thread t3 = new Thread(p => { //var t = p.ToString(); while (true) { if (lk) { Thread.Sleep(20); //每1秒执行1次 Console.WriteLine("我是线程3.333333333333333333"); } } }); Thread t4 = new Thread(p => { //var t = p.ToString(); while (true) { //让3个线程都暂停 Thread.Sleep(20); //暂停1s 后再执行 if (lk) { lk = false; Thread.Sleep(10); //暂停1s 后再执行 Console.WriteLine(""); lk = true; } } }); Thread t5 = new Thread(() => { while (true) { if (lk) { Thread.Sleep(20); //每1秒执行1次 Console.WriteLine("我是线程5.5555555555555555555555"); } } }); Thread t6 = new Thread(() => { while (true) { if (lk) { Thread.Sleep(20); //每1秒执行1次 Console.WriteLine("我是线程6.6666666666666666666666"); } } }); //t1.Start();//启动线程1 //t2.Start();//启动线程2 //passing parameter to parameterized thread //t3.Start(4); //启动线程3 t4.Start(4); //t5.Start(); //t6.Start(); ////wait for t1 to fimish //t1.Join(); //.Join 就是加入的意思,也就是说新创建的线程加入到进程中,并马上执行 //t2.Join(); //t3.Join(); //t4.Join(); //wait for t2 to finish //t2.Join(); //wait for t3 to finish //Console.WriteLine("所有线程 Exited in 100 secods", (DateTime.Now - startTime).TotalSeconds); } } }