黑马程序员.net基础九

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


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

 

  为什么要用多线程

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

          

         

          

    }  

    //定义一个计数方法

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

             

       }  

 //使用多线程来解决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 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> { "飞机", "汽车", "轮船" });  

  

        }  

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种编程语言,而"黑马程序员"是一个培训机构。在Python中,可以使用print语句来输出文本。例如,通过运行以下代码:print("零基础,学Python, 月薪过万,就来黑马程序员。"),可以将"零基础,学Python, 月薪过万,就来黑马程序员。"这个文本输出到屏幕上。 除了输出文本,Python还可以定义变量并进行打印,例如:a = 666,b = 3.14,c = "零基础,学Python, 月薪过万,就来黑马程序员。",然后使用print语句打印这些变量。 无论是输出文本还是打印变量,在Python中都可以使用print语句来实现。同时,注释是在代码中用来解释和说明代码的部分,通过注释可以提供对代码的理解和解释。所以,如果你想在Python程序中输出"黑马程序员",你可以使用print语句来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [黑马程序员最新Python教程——第一阶段(1)](https://blog.csdn.net/weixin_46225503/article/details/126850291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [黑马程序员---Python高级技巧编程](https://blog.csdn.net/qq_45893319/article/details/129965089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值