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);
        }

    }
}

 

posted @ 2019-09-27 11:09  enych  阅读(232)  评论(0编辑  收藏  举报