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