本视频从最简单的写法到高级写法逐步讲解多线程类的使用.. 以及增加平时使用到引发的错误,及使用场景进行详细的讲解多线程的应用  
  
 最简单的线程的声明          [C#] 纯文本查看 复制代码  Thread th = new Thread(Func); //创建线程[/align]th.Start();//启动线程
private void Func()//线程执行的方法
{ 
} 
学习线程最经典的错误 
 线程间操作无效: 从不是创建控件“label1”的线程访问它。 
小型项目如何解决跨线程访问异常:   Control.CheckForIllegalCrossThreadCalls = false;//忽略跨线程间的调用.不推荐大家使用.它可能会引发一些未知的异常. 
创建窗口句柄时出错。 
引发原因: 窗体被结束,但是线程还未结束 
前后台线程的区别 th.IsBackground = true;//当前线程为后台线程 后台线程和前台线程                         引发一个错误: 当窗体关闭,方法内没有调用窗体控件时.虽然看着窗体已经结束,但是任务管理器中一样可以看见进程依然在运行.                            原因: 启用前台线程,但是UI关闭后,没有通知前台线程结束,主线程并未完全退出.因为只要有一条子线程还在运行,那么它(子线程)将阻塞主线程关闭. 窗体关闭前台线程依然会继续运行.后台线程则不会. 线程的销毁时间  
 传递非object类型的写法    [C#] 纯文本查看 复制代码 Thread th = new Thread(new ThreadStart(delegate {[/align]GetInfo(strinfo);
}));
th.Start();
ThreadPool 线程池.
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate {
GetInfo(strinfo);
}));
线程池是不可控制的. 
Thread.Sleep(100);  //睡眠,挂起. 参数(int)单位毫秒     是全局有效.! 全局说的是主线程. 
th.Suspend();   //挂起线程 th.Resume();   //继续挂起的线程 ThreadState   //线程的状态枚举 
应用场景 
         Post程序, 
         需要输入验证码 
         先开启线程,来执行get请求.得到验证码图像,挂起这个线程.等待验证码的输入. 
  lock (this)   //锁     {               } 固定任务数.不固定线程数.自己计算需要多少线程 
现在这个类的好处:    帮助你理解其他人是如何处理线程的. 
两种情况   固定线程数,不固定任务数 
           固定任务数,自动计算线程数 
缺点: 无法重复利用线程. 
   |