索尼Xperia|上位机开发——多线程启动停止暂停继续

索尼Xperia|上位机开发——多线程启动停止暂停继续

前言电气工程师初学上位机编程时 , 很容易因为多线程出现各种问题 , 导致不敢使用多线程 。 但是多线程技术在做开发中 , 是不可忽视的一个技术 , 基本上我们实际应用中 , 每个项目都会使用多线程 , 所以做上位机开发多线程技术必须掌握 。
为什么要用多线程随着工业的进步 , 现在的笔记本、台式机大都是双核的 , 4核、8核甚至16核 , 也很常见 , 如果是单线程的程序 , 那么在双核CPU上就浪费了50% , 在4核CPU上就浪费了75% 。
单核CPU上所谓的”多线程”那是假的多线程 , 同一时间处理器只会处理一段逻辑 , 只不过线程之间切换得比较快 , 看着像多个线程”同时”运行罢了 。
多核CPU上的多线程才是真正的多线程 , 它能让你的多段逻辑同时工作 , 多线程 , 可以真正发挥出多核CPU的优势来 , 达到充分利用CPU的目的 。
如果你做项目不使用多线程 , 不仅是技术的问题 , 也是对电脑资源的极大浪费 , 就像你买了一辆配置非常高的越野车 , 你仅仅只用它来日常代步一样 。
为什么不敢用多线程之前跟一些学员沟通时发现 , 很多学员在上位机程序中之所以不敢使用多线程 , 是因为之前出过问题 , 有种“一朝被蛇咬 , 十年怕井绳”的感觉 。
为什么多线程容易出问题 , 有个主要的原因在于多线程充满着“未知性” , 有的人使用时 , 发现代码并没有按照预想的流程在走 , 这其实是正常的 。
我们必须要明确一点 , 多线程确实是“不可控的” , 有某种意义上来说 , 多线程是靠CPU调度来执行的 , 并非人为去控制 。
我们所谓的控制多线程 , 仅仅是.NET框架开放了一些接口给开发者 , 这样可以相对性地间接控制多线程的启动停止暂停继续 。
线程的启动停止线程的启动停止 , 从.Net Framework 4.5开始 , Task提供了一个叫CancellationTokenSource的对象 , 可以使用它来对多线程的启停进行控制 。
首先 , 我们做一个线程任务 , 这个任务很简单 , 只是不断操作某个变量 , 每0.1秒加1 , 到一定值之后 , 重置为0 , 然后将这个值显示在界面上 , 界面如下所示:

所以任务方法如下:
/// <summary>
        /// 多线程执行方法
        /// </summary>
        private void TaskMethod()
        {
            while (!cts.IsCancellationRequested)
            {
                CurrentValue++;
                if (CurrentValue == 200)
                {
                   CurrentValue = 0;
                
                Thread.Sleep(100);
            
        

我们可以看到在方法里调用了一个cts对象 , 这个对象就是CancellationTokenSource的对象 , 因此我们需要创建一个CancellationTokenSource对象cts: