黑马程序员-------.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培训、期待与您交流! ----------------------
- 黑马程序员-------.net基础知识八
- 黑马程序员.net基础八
- 黑马程序员,Java基础知识八:IO流
- 黑马程序员-------.net基础知识一
- 黑马程序员-------.net基础知识二
- 黑马程序员-------.net基础知识三
- 黑马程序员-------.net基础知识七
- 黑马程序员-------.net基础知识四
- 黑马程序员-------.net基础知识五
- 黑马程序员-------.net基础知识六
- 黑马程序员-------.net基础知识九
- 黑马程序员-------.net基础知识十
- 黑马程序员——ADO.net基础知识
- 黑马程序员—ADO.NET 基础知识
- 黑马程序员—ADO.NET 基础知识
- 黑马程序员---java基础知识(八):IO流
- 黑马程序员(八)
- 黑马程序员—初学.net面向过程的基础知识汇集
- Python字典赋值到JavaScript变量
- NTP时间服务器
- 疑问
- Android 使用Parcelable序列化对象
- hadoop深入了解
- 黑马程序员-------.net基础知识八
- Android开发实现qqminihd 左右滑动菜单效果
- [剑指offer][面试题25]二叉树中和为某一值得路径
- iOS 7人机交互指南译文汇总
- Java 匿名内部类
- 发生问题时程序员最常见的 30 种反应
- 本资料的资料来源以及 http://ideone.com/ - C++在线编译运行器
- 一年又一年变成大龄程序员
- UVa 167 The Sultan's Successors (八皇后问题)