常州上位机培训

常州机器视觉培训

常州机器人培训

江苏和讯自动化设备有限公司欢迎您!
  • 和讯PLC,电工培训中心优势,名师团队一对一教学.
热门课程
联系方式
  • 常州和讯自动化培训中心
  • 常州市新北区太湖东路府琛大厦2号楼307-1室,307-2室(常州万达广场对面)
  • 电话:0519-85602926
  • 手机:15861139266 13401342299
当前位置:网站首页 > 新闻中心 新闻中心
C#多线程启动停止暂停继续(上)-常州机器视觉学习,常州上位机学习
日期:2024-3-5 16:45:17人气:  标签:常州机器视觉学习 常州上位机学习

前言

初学者学习编程时,很容易因为多线程出现各种问题,导致不敢使用多线程。但是多线程技术在做开发中,是不可忽视的一个技术,基本上我们实际应用中,每个项目都会使用多线程,所以多线程技术必须掌握。


为什么要用多线程

随着工业的进步,现在的笔记本、台式机大都是双核的,4核、8核甚至16核,也很常见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。

单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了。

多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。

如果你做项目不使用多线程,不仅是技术的问题,也是对电脑资源的极大浪费,就像你买了一辆配置非常高的越野车,你仅仅只用它来日常代步一样。


为什么不敢用多线程

之前跟一些学员沟通时发现,很多学员之所以不敢使用多线程,是因为之前出过问题,有种“一朝被蛇咬,十年怕井绳”的感觉。

为什么多线程容易出问题,有个主要的原因在于多线程充满着“未知性”,有的人使用时,发现代码并没有按照预想的流程在走,这其实是正常的。

我们必须要明确一点,多线程确实是“不可控的”,有某种意义上来说,多线程是靠CPU调度来执行的,并非人为去控制。

我们所谓的控制多线程,仅仅是.NET框架开放了一些接口给开发者,这样可以相对性地间接控制多线程的启动停止暂停继续。

多线程的启动停止

线程的启动停止,从.Net Framework 4.5开始,Task提供了一个叫CancellationTokenSource的对象,可以使用它来对多线程的启停进行控制。


首先,我们做一个线程任务,这个任务很简单,只是不断操作某个变量,每0.1秒加1,到一定值之后,重置为0,然后将这个值显示在界面上,界面如下所示:

2.png

所以任务方法如下:


        /// <summary>

        /// 多线程执行方法

        /// </summary>

        private void TaskMethod()

        {

            while (!cts.IsCancellationRequested)

            {

                CurrentValue++;

                if (CurrentValue == 200)

                {

                   CurrentValue = 0;

                }

                Thread.Sleep(100);

            }

        }

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


        /// <summary>

        /// 线程启停控制

        /// </summary>

        private CancellationTokenSource cts;

然后在启动线程按钮的事件里,编写代码如下:


        private void btn_Start_Click(object sender, EventArgs e)

        {

            cts = new CancellationTokenSource();

            Task.Run(() =>

            {

                TaskMethod();

            }, cts.Token);

        }

停止线程按钮的事件里,只需要调用cts的Cancel方法即可:


        private void btn_Stop_Click(object sender, EventArgs e)

        {

            cts.Cancel();

            CurrentValue = 0;

        }

其实,说白了,就是通过cts来控制cts的IsCancellationRequested属性,进而实现多线程的控制。


本文网址:
下一篇:没有资料

相关信息:
版权所有 CopyRight 2006-2017 江苏和讯自动化设备有限公司 电话:0519-85602926 地址:常州市新北区太湖东路府琛大厦2号楼307-1室,307-2室
ICP备14016686号-2 技术支持:常州鹤翔网络
本站关键词:常州电工培训 常州电工证 常州变频器培训 常州触摸屏培训 网站地图 网站标签
在线与我们取得联系