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

来源:互联网 发布:深圳网络推广课程 编辑:程序博客网 时间:2024/05/20 21:22


---------------------- 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培训、期待与您交流! ----------------------

原创粉丝点击