多线程

    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);
        }
    }
posted @ 2013-07-06 12:11  pengbg  阅读(271)  评论(0编辑  收藏  举报