进程与线程
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);
- }