黑马程序员--多线程

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

进程与线程

1.一个进程至少一个线程

2.同一个进程的多个线程之间可以“并发”执行

为什么要用多线程

1.让计算机“同时”做多件事

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

3.多线程可以让一个程序“同时”处理多个事情

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


单线程带来的问题

我们在一个窗体中两个按钮,一个单线程执行循环,一个是多线程执行循环。当我们点击单线程按钮是,我们的窗体是不能移动的,,被卡死,;而我们点击多线程执行循环的时候,窗体是可以任意拖动的,当循环执行完,显示给用户。

/// <summary>
        /// 循环
        /// </summary>
        void CountTime()
        {
            for (int i = 0; i < 999999999; i++)
            {

            }
            MessageBox.Show("xunhuanwanbi ");
        }
        /// <summary>
        /// 单线程问题
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSingleThread_Click(object sender, EventArgs e)
        {
            
		CountTime()
 } 
/// <summary> 
/// 多线程解决
 /// </summary>
 /// <param name="sender"></param> 
/// <param name="e"></param>
 private void btnMulThread_Click(object sender, EventArgs e)
 {
 Thread threadFrist = new Thread(CountTime); threadFrist.Start();
 }

.net中如何实现多线程
首先为线程写一个方法,方法中就是线程运行所要执行的代码。线程启动,通过委托调用该方法。
产生一个线程的4个步骤
编写产生线程所要执行的方法
引用System.Threading命名空间
实例化Thread类,并传入一个执行线程所要运行方法的委托。(线程已经产生,还未执行)
调用Thread实例的Start方法,标记该线程可以被CPu执行了,具体执行时间有cpu决定
前台线程和后台线程
前台线程:只有所有的前台线程都关闭才能完成程序关闭

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

方法重入

当我们有两个线程时,第一个线程还未执行完,cpu就是终止当前线程,启动另一个线程,交给另一个线程执行。这就是线程重入问题,。

每个线程都是单独执行方法,哪怕调用同一个方法。

执行带参数的方法


/// <summary>
        /// 要执行的带参数的方法
        /// </summary>
        /// <param name="name"></param>
        void ShowTxt(object name)
        {
            if (name == "")
            {
                MessageBox.Show("null");
            }
            else
            {
                MessageBox.Show("name=" + name);
            }
        }
        /// <summary>
        /// 线程执行带参数的方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMulThreadWithPara_Click(object sender, EventArgs e)
        {
            Thread ts = new Thread(ShowTxt);
            ts.IsBackground = true;
            ts.Start(textBox2.Text);
        }




---------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值