黑马程序员-------.net基础知识八


---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

 

 

 

 

单线程缺点和简单多线程操作

 

  为什么要用多线程

(1)让计算机“同时”做多件事情,节约时间。

(2)后台运行程序,提高程序运行效率,也不会使主界面出现无响应的情况。

(3)多线程可以让一个程序“同时”处理多个事情。(用时间交换“空间”)

(4)计算机cpu大部分时间处于空闲状态,浪费了cpu资源。

 

例:单线程的缺点暴露出来,在用户进行计算的时候,又想做别的,但是UI卡死。。

    //定义一个计数方法
        void Count()
        {
            DateTime begin = DateTime.Now;
            for (int i = 0; i < 999999999; i++) 
            {
            
            }
            TimeSpan now = begin.Subtract(DateTime.Now);
            MessageBox.Show("运行完毕········"+now );
        }
        private void btnSingleThread_Click(object sender, RoutedEventArgs e)
        {
          
            Count();
            
           
            
        }

使用多线程来解决UI卡死问题

 

 //使用多线程来解决Ui卡死问题。
        private void btnT_Click(object sender, RoutedEventArgs e)
        {
            //创建线程对象,传入要线程执行的方法。
            Thread Multithread = new Thread(Count);
            Multithread.IsBackground = true;
            //启动线程,执行方法
            Multithread.Start();
            
        }

前台线程与后台线程

前台线程:只有所有的前台线程都关闭才能完成程序关闭时。

后台线程:只要所有的前台线程结束,后台线程自动结束。

将线程设置为后台线程: MultiThread.isbackground = true;

 

进程和线程的关系


 

注意:一个进程至少有一个线程,同一个进程中的多个线程之间可以“并发”执行。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针,程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指线程中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

线程实现带参数的方法

例:

 

void ShowTxtName(object name)

        {

            if (name != null)

                MessageBox.Show("name=" + name.ToString());

            else

                MessageBox.Show("null");

        }


        //线程执行带参数的方法

        private void btnThreadWithPara_Click(object sender, EventArgs e)

        {

            ParameterizedThreadStart pts = new ParameterizedThreadStart(ShowTxtName);

            //执行带参数的方法

            Thread thread = new Thread(ShowTxtName);

            thread.IsBackground = true;

            thread.Start(txtName.Text);

        }

    }

    public class MyThread

    {

        //--------------------执行不带参数的方法------------------

        ThreadStart ts;

        public MyThread(ThreadStart ts)//要求用户在new的时候传入方法委托

        {

            this.ts = ts;//将委托赋给全局变量

        }

        public void Start()

        {

            if (ts != null)

                ts();//调用委托,执行委托里的方法

            else

                pts(null);

        }


        //--------------------执行带参数的方法---------------------

        ParameterizedThreadStart pts;

        public MyThread(ParameterizedThreadStart pts)//要求用户在new的时候传入方法委托

        {

            this.pts = pts;//将委托赋给全局变量

        }

        public void Start(object o)

        {

            pts(o);//调用委托,执行委托里的方法


        }

    }


 

线程实现带多个参数的方法

例:

//------------------执行带多个参数的方法----------------------

        void ShowTxtName2(object li)

        {

            List<string> list = li as List<string>;

            if (list != null)

            {

                foreach (string s in list)

                {

                    MessageBox.Show(s);

                }

            }

        }


        private void btnThreadWithManyPara_Click(object sender, EventArgs e)

        {

            Thread thread = new Thread(ShowTxtName2);

            thread.IsBackground = true;

            thread.Start(new List<string> { "佐助", "鸣人", "小樱" });

        }


 

 

 

 

----------------------ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值