进程与线程

进程与线程

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

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

为什么要用多线程

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

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

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

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


单线程带来的问题

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

[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 循环  
  3.         /// </summary>  
  4.         void CountTime()  
  5.         {  
  6.             for (int i = 0; i < 999999999; i++)  
  7.             {  
  8.   
  9.             }  
  10.             MessageBox.Show("xunhuanwanbi ");  
  11.         }  
  12.         /// <summary>  
  13.         /// 单线程问题  
  14.         /// </summary>  
  15.         /// <param name="sender"></param>  
  16.         /// <param name="e"></param>  
  17.         private void btnSingleThread_Click(object sender, EventArgs e)  
  18.         {  
  19.               
  20.         CountTime()  
  21.  }   
  22. /// <summary>   
  23. /// 多线程解决  
  24.  /// </summary>  
  25.  /// <param name="sender"></param>   
  26. /// <param name="e"></param>  
  27.  private void btnMulThread_Click(object sender, EventArgs e)  
  28.  {  
  29.  Thread threadFrist = new Thread(CountTime); threadFrist.Start();  
  30.  }  

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

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

方法重入

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

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

执行带参数的方法


[csharp]  view plain copy
  1.   
[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 要执行的带参数的方法  
  3.         /// </summary>  
  4.         /// <param name="name"></param>  
  5.         void ShowTxt(object name)  
  6.         {  
  7.             if (name == "")  
  8.             {  
  9.                 MessageBox.Show("null");  
  10.             }  
  11.             else  
  12.             {  
  13.                 MessageBox.Show("name=" + name);  
  14.             }  
  15.         }  
  16.         /// <summary>  
  17.         /// 线程执行带参数的方法  
  18.         /// </summary>  
  19.         /// <param name="sender"></param>  
  20.         /// <param name="e"></param>  
  21.         private void btnMulThreadWithPara_Click(object sender, EventArgs e)  
  22.         {  
  23.             Thread ts = new Thread(ShowTxt);  
  24.             ts.IsBackground = true;  
  25.             ts.Start(textBox2.Text);  
  26.         }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值