所谓单线程着只能让我们的程序去做一件单一的事情,严重时会出现程序“假死”的现象,而如果我们需要同时去做两个及以上的事情时则需用多线程。多线程能让计算机“同时”处理多个事情,节约时间,后台运行程序,提高程序的运行效率也不会出现主界面无响应的情况。
产生一个线程的四步骤:
一、编写产生线程所要执行的方法
二、引用System.Threading;命名空间
三、实例化Thread类,并传入一个指向线程所要运行方法的委托。(这时候这个线程已经产生,但是还未运行)
四、调用Thread实例的Start方法,标记该线程可以被CPU执行了,具体什么时候被执行由CPU决定
//创建一个线程→去执行一个方法
Thread th = new Thread(方法名);
//将线程设置为后台线程
th.IsBackground = true;
//标记这个线程准备就绪了,可以随时被执行。具体什么时候被执行由CPU决定
th.Start();
线程分为前台线程与后台线程
前台线程:只有所有的前台线程都关闭才能完成程序关闭;
后台线程:只要所有的前台程序结束,后台线程自动结束;
注意:在.Net framework下是不允许跨线程的访问,那怎样能解决跨线程访问的问题呢?见下图:
如图返回的是一个bool类型,在Form1_Load里写上Control.CheckForIllegalCrossThreadCalls = false;
--------------------------------------------------------------------------------------------------------
当我们关闭主窗体/主线程时,主窗体上的资源就会释放掉;但是后台线程出于某些原因并没马上结束,且后台线程还在访问前台的内容时就有可能会抛出各式各样的异常;
所以我们需要在点击窗体关闭按钮的时候(关于Form1属性-事件-FormClosing),需要判断新线程是否为null;如果新线程为null就说明新线程也被关闭了,如果不为null那么我们手动的将他关闭掉;
if(th != null)
{
//结束这个线程 注意!!!!线程Abort之后就不能被重新Start了!!!
th.Abort();
}
---------------------------------------------------------------------------------------------------------
Thread.Sleep(1)静态方法,可以使当前线程停止一段时间运行;(单位:毫秒)
Thread.CurrentThread获得当前线程的引用;