多线程

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            CheckForIllegalCrossThreadCalls = false;

            //关闭窗体的跨线程访问控件 检查

        }

        private void button1_Click(object sender, EventArgs e)

        {

            threadfun();

        }

        object obj1 = new object();

        void fun()

        {

            lock (obj1)//不加锁时,之前的一次循环没结束,也可执行执行下次循环

            {

                for (int i = 0; i < 5000; i++)

                {

                    textBox1.Text = (int.Parse(textBox1.Text) + 1).ToString();

                }

            }

        }

        void funparam(object obj)

        {

            object[] o = (object[])obj;

            MessageBox.Show(o[0].ToString() + " " + o[1].ToString());

        }

 

        void threadfun()

        {

            Thread T1 = new Thread(fun);

            T1.IsBackground = true;

// 1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。

//2、当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。

//3、只有IsBackground=TRUE的线程才会随着主线程的退出而退出。(这样没执行完突然退出不会报错)

//4、当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。

//5、原理:只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。

            T1.Start();

            Thread T2 = new Thread(fun);

            T2.IsBackground = true;

            T2.Start();

            Thread T3 = new Thread(fun);

            T3.IsBackground = true;

            T3.Start();

            Thread T4 = new Thread(funparam);

            object oblarr = new object[] { "bing", 12 };

            T4.IsBackground = true;

            T4.Start(oblarr);

            //T4 简写了T5

            ParameterizedThreadStart p = new ParameterizedThreadStart(funparam);

            Thread T5 = new Thread(p);

               T5.IsBackground = true;

            T5.Start(oblarr);

        }

    }

你可能感兴趣的:(多线程)