Thread 多线程 等待 回调函数 获取返回值

来源:互联网 发布:淘宝药品需求清单 编辑:程序博客网 时间:2024/06/05 21:08

Thread 是1.1版本时候的线程 它默认是前台线程

前台线程:进程关闭后,线程还会执行完


无参数多线程

 Console.WriteLine("主线程开始");            //不带参数的多线程            ThreadStart sta = () =>            {                Thread.Sleep(500);                Console.WriteLine("线程{0}开始执行方法",Thread.CurrentThread.ManagedThreadId);            };            //创建Thread                      //实现多线程            for (int i = 0; i < 5; i++)            {                Thread t = new Thread(sta);                t.Start();                           }                      Console.WriteLine("主线程结束");

结果



有参数 多线程

Console.WriteLine("主线程开始");            //带参数多线程            ParameterizedThreadStart p = t =>             {                Thread.Sleep(1000);                Console.WriteLine("参数为{0},当前线程为{1}",t,Thread.CurrentThread.ManagedThreadId);            };            for (int i = 0; i < 5; i++)            {                Thread t = new Thread(p);                t.Start(i);            }            Console.WriteLine("主线程结束");

结果



回调函数

 public static void Do3()        {            //Thread实现添加回调函数            //在我看来这就是伪回调            //正经的回调函数是如果有等待线程的话,等待只会等着方法体完成就算等待完成,而不会等待回调函数完成            //这种实现方法 会把回调函数也等待完成            Console.WriteLine("主线程开始");            ThreadStart sta = () =>             {                FirstFun();                CallBackFun();            };            List<Thread> tList = new List<Thread>();            for (int i = 0; i < 5; i++)            {                Thread t = new Thread(sta);                t.Start();                tList.Add(t);//加入集合中 方便等待            }            //等待            foreach (Thread t in tList)            {                //此效果就是将线程加入主线程当中  起到等待效果                t.Join();            }            Console.WriteLine("主线程结束");            Console.Read();        }        //委托方法        public static void FirstFun()        {            Thread.Sleep(1000);            Console.WriteLine("这里是主方法体内容,当前线程ID{0}",Thread.CurrentThread.ManagedThreadId);        }        //回调函数        public static void CallBackFun()        {            Thread.Sleep(1000);            Console.WriteLine("这里是回调函数内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);        }

调用Do3的结果


有回调函数 有返回值

 public static void Do4()        {             //带参数带返回值                        ParameterizedThreadStart p = t =>            {                string Rvalue = null;                           Rvalue=FirstFun1((int)t);                CallBackFun1();                Console.WriteLine("结果{0}",Rvalue);            };            for (int i = 0; i < 5; i++)            {                Thread t = new Thread(p);                t.Start(i);            }                }        //委托方法        public static string FirstFun1(int i)        {            Thread.Sleep(1000);            Console.WriteLine("这里是主方法体内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);            return i.ToString();        }        //回调函数        public static void CallBackFun1()        {            Thread.Sleep(1000);            Console.WriteLine("这里是回调函数内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);        }


结果




等待

ThreadStart sta = () =>             {                FirstFun();                CallBackFun();            };            List<Thread> tList = new List<Thread>();            for (int i = 0; i < 5; i++)            {                Thread t = new Thread(sta);                t.Start();                tList.Add(t);//加入集合中 方便等待            }            //等待            foreach (Thread t in tList)            {                //此效果就是将线程加入主线程当中  起到等待效果                t.Join();            }



0 0
原创粉丝点击