- 主线程的代码先执行
- 再执行子线程
- 最后执行主线程的方法
其实还是主线程执行,再New了一个新线程,然后大家各干个的事了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public delegate void Entrust(string str); static void Main(string[] args) { Entrust callback = new Entrust(ShowMesage); //把方法赋值给委托 Thread th = new Thread(p=> SendResult(callback,"xxx","abc")); th.IsBackground = true; th.Start(callback);//将委托传递到子线程中 Console.WriteLine("我是主程序里输出的"); Console.ReadKey(); } private static void SendResult(object obj, string str, string strResult) { try { //注意:线程的参数是object类型 for (int i = 1; i <= 10; i++) { Console.WriteLine("子线程循环操作第 {0} 次", i); Thread.Sleep(500); } throw new Exception("子线程报错了"); } catch (Exception ex) { Entrust callback = obj as Entrust;//强转为委托 callback("我是子线程,我执行完毕了,通知主线程:"+ex.Message); } } private static void ShowMesage(string str) { Console.WriteLine(str); }
执行结果:
把代码改成不用委托,好像也没啥区别,不太明白。好像没有通知到主线程,只是调用了类的一个方法(ShowMessage)而已。
这些代码好像没有啥意义。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static void Main(string[] args) { //Entrust callback = new Entrust(ShowMesage); //把方法赋值给委托 //Thread th = new Thread(p=> SendResult(callback,"xxx","abc")); //th.IsBackground = true; //th.Start(callback);//将委托传递到子线程中 //th.Start(); Thread t = new Thread(p => SendResult(null, "xxx", "abc")); t.Start(); Console.WriteLine("我是主程序里输出的"+Thread.CurrentThread.ManagedThreadId); Console.ReadKey(); } private static void SendResult(object obj, string str, string strResult) { try { //注意:线程的参数是object类型 for (int i = 1; i <= 10; i++) { Console.WriteLine(Thread.CurrentThread.ManagedThreadId+"子线程循环操作第 {0} 次", i); Thread.Sleep(500); } throw new Exception("子线程报错了"); } catch (Exception ex) { ShowMesage(ex.Message); //Entrust callback = obj as Entrust;//强转为委托 //callback("我是子线程,我执行完毕了,通知主线程:" + ex.Message); } } private static void ShowMesage(string str) { Console.WriteLine("当前进程ID:"+Thread.CurrentThread.ManagedThreadId+ str); }