using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication5 { public class ThreadCallBackTest { /// <summary> /// 记录正常完成的子线程数 /// </summary> int count = 0; /// <summary> /// 主函数 /// </summary> /// <returns></returns> public bool Run() { //总线程数 int total = 10; MyParam m; List<Thread> listThread = new List<Thread>(); for (int i = 0; i < total; i++) { m = new MyParam(); m.x = i; m.y = i + 1; m.callBack = ThreadCallBack; Thread t = new Thread(new ParameterizedThreadStart(Buss)); t.Start(m); listThread.Add(t); } //等待所有线程完成 foreach (var item in listThread) { item.Join(); } //验证子线程完成情况 if (count == total) { Console.WriteLine("全部完成"); return true; } else { Console.WriteLine("未全部完成,count=" + count); return false; } } /// <summary> /// 子线程函数(业务处理) /// </summary> /// <param name="param"></param> private void Buss(object param) { try { MyParam myparam = (MyParam)param; Thread.Sleep(2000); if (myparam.x == 5) { throw new Exception("5555555"); } else { //业务处理 Console.WriteLine(string.Format("第{0}个线程,{0}+{1}={2}", myparam.x, myparam.y, myparam.x + myparam.y)); ThreadCallBackDelegate cb = myparam.callBack as ThreadCallBackDelegate; cb(); } } catch (Exception ex) { //子线程异常捕获,防止子线程异常导致主程序崩溃 Console.WriteLine(ex.ToString()); } } /// <summary> /// 回调函数,业务处理正常、完成后调用,异常不调用 /// </summary> private void ThreadCallBack() { count++; } /// <summary> /// 定义委托 /// </summary> private delegate void ThreadCallBackDelegate(); /// <summary> /// 子线程参数 /// </summary> class MyParam { public int x, y; public ThreadCallBackDelegate callBack; } } }
执行结果: