1.前台线程:只有所有的前台线程都关闭才能完成程序的关闭
2.后台线程:只要所有的前台线程结束,后台线程自动结束
线程设置为后台线程:thread.IsBackground = true;
取消跨线程的访问:Control.CheckForIllegalCrossThreadCalls = false;
Abort()终止线程,终止完成之后不能再start()
如果线程执行的方法需要参数,那么要求这个参数必须object类型
lock关键字可以确保一次只有一个线程调用它
lock关键字可以简单理解成代码块的“锁”
3.委托类型的BeginInvoke(<输入和输出变量>,AsyncCallBack callback,object ayncSate)方法:异步调用的核心
第一个参数表示委托对应的方法实参
第二个参数callback,回调函数,表示异步调用结束后,自动调用的方法
第三个参数ayncSate,用于向回调函数提供相关的参数信息
返回值:IAsyncResult->异步操作状态接口,封装了异步执行中的参数
4.异步编程的总结:
异步编程是建立在委托的基础上一种编程的方法
异步调用的每个方法都是独立的线程中执行的。因此,本质上就是一种多线程程序,是简化的多线程
比较适合在后台运行较为耗时的<简单任务>,并且任务之间要求相互独立,任务中不应该有直接访问可视化控件大的代码
如果后台任务要求必须按照特定顺序执行,或者访问共享资源,则异步编程不太适合,应选择多线程开发技术
5.ThreadPool
如果某个对象创建和销毁代价比较高,同时这个对象还可以反复使用的,就需要一个池子保存多个这样的对象,需要用的时候从池子里面获取,用完之后不用销毁,放回池子,作用:节约资源提升性能,此外,还能管控总数量,防止滥用,如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止。
线程池启动一个线程非常简单,直接调用静态方法QueueUserWorkItem