c#让三个线程按照顺序执行
现实的例子
三个线程都是while(true)的循环体
A线程:采集数据
B线程:画曲线
C线程:存数据库
AutoResetEvent类
AutoResetEvent
是一个线程同步的类,它提供了一种机制,允许一个或多个线程等待直到接收到信号,然后继续执行。以下是
AutoResetEvent
的一些常用成员:
WaitOne()
:使当前线程等待接收信号。如果没有收到信号,则当前线程将被阻塞,直到接收到信号。Set()
:发送信号,唤醒一个正在等待的线程。如果没有线程在等待,下一个调用WaitOne()
的线程将立即被唤醒。Reset()
:重置事件状态,将其设置为非终止状态。AutoResetEvent
类在调用Set()
方法后会自动调用Reset()
方法将事件状态重置为非终止状态。
代码
public partial class Form4 : Form{AutoResetEvent A;AutoResetEvent B;AutoResetEvent C;int a;public Form4(){InitializeComponent();A = new AutoResetEvent(false);B = new AutoResetEvent(false);C = new AutoResetEvent(false);Task.Factory.StartNew(() =>{for (int i = 0; i < 100; i++){A.WaitOne();Invoke(new Action(() => label1.Text = i.ToString()));Thread.Sleep(500);B.Set();}});Task.Factory.StartNew(() =>{for (int i = 0; i < 100; i++){B.WaitOne();Invoke(new Action(() => label2.Text = i.ToString()));Thread.Sleep(500);C.Set();}});Task.Factory.StartNew(() =>{for (int i = 0; i < 100; i++){C.WaitOne();Invoke(new Action(() => label3.Text = i.ToString()));Thread.Sleep(500);A.Set();}});}private void button1_Click(object sender, EventArgs e){A.Set();}}
这段代码演示了如何使用
AutoResetEvent
实现两个线程操作按钮的功能。首先,在
Form4
类中定义了三个AutoResetEvent
对象:A
、B
和C
,以及一个整型变量a
。然后在构造函数中初始化这些对象。接下来,通过使用
Task.Factory.StartNew()
方法创建三个任务,并在每个任务内部编写逻辑。第一个任务使用
for
循环来迭代 100 次。在每次循环中,它调用A.WaitOne()
方法等待信号,然后使用Invoke()
方法将计数值赋值给label1.Text
属性,并在界面上显示出来。然后线程休眠 500 毫秒,并通过B.Set()
方法发送信号给第二个任务。第二个任务也使用
for
循环来迭代 100 次,类似于第一个任务。它调用B.WaitOne()
方法等待信号,然后使用Invoke()
方法将计数值赋值给label2.Text
属性,并在界面上显示出来。然后线程休眠 500 毫秒,并通过C.Set()
方法发送信号给第三个任务。第三个任务同样使用
for
循环来迭代 100 次,类似于前两个任务。它调用C.WaitOne()
方法等待信号,然后使用Invoke()
方法将计数值赋值给label3.Text
属性,并在界面上显示出来。然后线程休眠 500 毫秒,并通过A.Set()
方法发送信号给第一个任务。最后,在界面上有一个按钮
button1
,当点击按钮时,会调用A.Set()
方法,发送信号给第一个任务。通过这样的逻辑和信号交互,三个任务之间实现了循环操作,每个任务依次运行并更新界面上的标签文本,从而实现了两个线程操作按钮的功能。
运行截图
相关文章:
c#让三个线程按照顺序执行
现实的例子 三个线程都是while(true)的循环体 A线程:采集数据 B线程:画曲线 C线程:存数据库 AutoResetEvent类 AutoResetEvent 是一个线程同步的类,它提供了一种机制,允许一个或多个线程等待直…...
AWS Directory Service 开启ldaps
启用客户端 LDAPS 要启用客户端 LDAPS,您需要将证书颁发机构(CA)证书导入 AWS Managed Microsoft AD,然后在目录上启用 LDAPS。启用后,AWS 应用程序与您自行管理的 Active Directory 之间的所有 LDAP 通信将通过安全套…...
Seata 以 Nacos 为注册中心启动
Seata 以 Nacos 为注册中心启动 修改 conf 下的 application.yml 配置 server:port: 7091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${user.home}/logs/seataextend:logstash-appender:destination: 127.0.0.1:4560kafk…...
Unity填坑-灯光烘焙相关
Unity填坑-灯光烘焙相关 文章目录 Unity填坑-灯光烘焙相关前言一、Light的模式二、光的效果分类三、各种Light模式与烘焙的说明1.Realtime,实时光2.baked,烘焙光3.mixed,混合 四、实时全局光五、其他说明1.动态物体的全局光照效果2.手机使用烘焙注意的点3.其他设置 前言 项目组…...
【python】TCP测速程序
一、服务端 下面是一个简单的 Python 服务端程序的示例,使用标准库中的 socket 模块来建立一个 TCP 服务器。该服务器接收客户端的连接请求,客户端发送一定大小的数据流以测试 TCP 带宽。 实际场景中带宽测试可能需要更复杂的逻辑来确保测试的准确性。 …...
新书速览|从零开始大模型开发与微调:基于PyTorch与ChatGLM
详细讲解大模型基本理论、算法、程序实现与应用实战,揭示大模型开发与微调技术 1 本书内容 大模型是深度学习自然语言处理皇冠上的一颗明珠,也是当前AI和NLP研究与产业中最重要的方向之一。本书使用PyTorch 2.0作为学习大模型的基本框架,以C…...
边缘计算:连接实时数据的力量与未来发展之路
边缘计算是一种分布式计算范式,它旨在将数据处理、存储和应用服务带到数据源的近端,即网络的“边缘”。在边缘计算模型中,算力和存储资源距离末端用户或数据源更近,这减少了数据在网络中传输的距离,从而降低延迟&#…...
ZooKeeper 实战(四) Curator Watch事件监听
文章目录 ZooKeeper 实战(四) Curator Watch事件监听0.前言1.Watch 事件监听概念2.NodeCache2.1.全参构造器参数2.2.代码DEMO2.3.日志输出 3.PathChildrenCache3.1.全参构造器参数3.2.子节点监听时间类型3.2.代码DEMO 4.TreeCache4.1.构造器参数4.2.代码DEMO4.3.日志输出 ZooKe…...
Spring Boot 构建工具插件
本文为官方文档直译版本。原文链接 Spring Boot 构建工具插件 引言Spring Boot Maven PluginSpring Boot Gradle PluginSpring Boot AntLib 模块Spring Boot Ant 任务使用 "exejar" 任务示例 使用 "findmainclass" 任务例子 支持其它构建系统重新包装档案嵌…...
Java集成消息队列Kafka
1.Kafka maven坐标 在使用Maven构建Java项目时,你可以通过添加Kafka的Maven依赖来引入Kafka相关的库。下面是Kafka的Maven坐标: <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId&g…...
第十四章JSON
第十四章JSON 1.什么是JSON2.JSON的定义和访问3.JSON在JavaScript中两种常用的转换方式4.JavaBean和JSON的相互转换5.List集合和JSON的相互转换6.map集合和JSON的相互转换 1.什么是JSON 2.JSON的定义和访问 JSON的定义 JSON的类型是一个Object类型 JSON的访问 我们要…...
0_项目git地址——正点原子minifly与crazyflie
1、说明: 在每个专栏的第一篇文章,笔者都会贴出项目的git地址,方便后来者学习和复现; 下面介绍两个项目的官网资料和git地址,最后给出两者的对比; 2、正点原子minifly (1)minifly官网资料下载中心&#…...
php 字符串常用函数
目录 1.一些常用函数 2.代码示例 1.一些常用函数 函数名描述trim()删除字符串两端空行或其它预定义符rtrim()删除字符串右边空行或其它预定义符ltrim()删除字符串左边空行或其它预定义符dirname()返回路径中的目录部分str_split()把字符串分割到数组里explode()使用一个字符串…...
Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)
Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2) 在 https://zhangphil.blog.csdn.net/article/details/135374279 基础上,增加一个功能,当手指在上面的图片…...
FlinkOnYarn 监控 flink任务
Flink任务一般为实时不断运行的任务,如果没有任务监控, 任务异常时无法第一时间处理会比较麻烦。 这里通过调用API接口方式来获取参数,实现任务监控。 Flink任务监控(基于API接口编写shell脚本) 一 flink-on-yarn 模式 二 编写she…...
C++内存管理机制(侯捷)笔记1
C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第一讲primitives的笔记 截至…...
【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version
Non-blocking Lazy Schema Changes in Multi-Version Database Management Systems 1. Intro 1.1 Motivation 一个是online能够提供不停机的更新的能力,在很多业务系统里面是必要的。第二个是满足高可用,SaaS、PaaS要提供高可用的系统给用户ÿ…...
Rust 最新版1.75.0升级记
升级方法 稳定版 C:\>rustup update stable info: syncing channel updates for stable-x86_64-pc-windows-msvc info: latest update on 2023-12-28, rust version 1.75.0 (82e1608df 2023-12-21) info: downloading component cargo 5.9 MiB / 5.9 MiB (100 %) 3.…...
使用 KubeSphere 与极狐GitLab 打造云原生持续交付系统
极狐GitLab 简介 极狐GitLab 是一个一体化的 DevOps 平台,可以简单理解为 GitLab 在国内的“发行版”。是由极狐(GitLab)公司推出的产品(极狐(GitLab)公司是以“中外合资3.0”模式成立的公司,在国内独立运营,为国内用户提供适合本…...
EasyExcel的追加写入(新增POI、CSV)
总结:目前市面上流行的2种 EasyExcel和POI都不是真正的对物理excel文件进行追加导入。只是在缓存里面追加,最后一次性写入,并不能解决内存占用问题。 1.EasyExcel2.POI3.CSV 无非就是下面两种逻辑: 1.for循环查询数据,…...
JetBrains 开发工具——免费教育许可申请流程
JetBrains 开发工具——免费教育许可申请流程 本文将详细介绍通过教育邮箱申请Free Educational Licenses. Free Educational Licenses地址 1.选择符合自己的申请入口 2.填写申请表单提交 官方指南 😃😃😃...
打造高性价比小程序,轻松降低成本
随着移动互联网的普及,小程序已经成为一个热门的应用开发方向。然而,对于许多企业和个人而言,制作一个小程序的费用却让人望而却步。那么,如何以最低的成本制作一款高性价比的小程序呢? 答案很简单,只需要找…...
mysql 索引优化查询
MySQL的索引可以提高数据库查询性能。下面是一些常用的MySQL索引优化技巧: 创建合适的索引:根据查询条件选择合适的列作为索引,并确保这些索引在WHERE子句中被使用到。 示例代码:CREATE INDEX idx_name ON table_name (column_nam…...
跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置
引入GLFW: 在vendor里创建GLFW文件夹: 在github上下载,把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置:12、13、15、36…...
Tomcat基础升华学习
01 What is Tomcat 1.1 Tomcat官网 官网 :https://tomcat.apache.org 1.2 Understand 为什么说Tomcat是Servlet之类技术的实现? 在我们的理解中,Tomcat可以称为Web容器或者Servlet容器 不妨通过手写一个Tomcat来推导一下 1.2.1 创建Tomc…...
一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读
论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…...
GPDB - 高可用 - 流复制状态
GPDB - 高可用 - 流复制状态 GPDB的高可用基于流复制,通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL 1、WalSndState typedef enum WalSndState {WALSNDSTATE…...
最佳解决方案:如何在网络爬虫中解决验证码
Captcha(全自动区分计算机和人类的公开图灵测试)是广泛应用的安全措施,用于区分合法的人类用户和自动化机器人。它通过呈现复杂的挑战,包括视觉上扭曲的文本、复杂的图像或复杂的拼图等方式,要求用户成功解决这些挑战以…...
在线项目实习分享:股票价格形态聚类与收益分析
01前置课程 数据挖掘基础数据探索数据预处理数据挖掘算法基础Python数据挖掘编程基础Matplotlib可视化Pyecharts绘图 02师傅带练 行业联动与轮动分析 通过分析申银万国行业交易指数的联动与轮动现象,获得有意义的行业轮动关联规则,并在此基础上设计量…...
c# vb.net检测字符串是否匹配一组相似度数组input Like
VB.NET 检测字符串是否符合一个数组中的多个like条件,有没有最简单的函数? 在VB.NET中,可以使用Array.Exists方法结合String.Like方法来检测一个字符串是否符合一个数组中的多个LIKE条件。Array.Exists方法用于确定序列中的任何元素是否满足…...
wordpress不同尺寸图片大小/百度竞价效果怎么样
vim /etc/ssh/sshd_config...
品牌建设传播网站公司/网站建设公司业务
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意: 解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6,1…...
wordpress小程序百家号/青岛模板建站
中国人常说一句话:责任到人,否则就是无人负责。敏捷团队则提倡自组织团队,团队负责。那么敏捷团队是否就是无人负责?我在Linkedin的Scrum Alliance, Inc.组内提出了这个问题,下面有关此问题的一些回答: 从…...
网络营销的特点和职能/seo教育培训机构
原标题:Python对CSV文件的处理 在接口自动化测试中,把测试的数据存储到csv的文件也是一种很不错的选择,下面就详细的介绍如何实现CSV文件内容的读取和如何把数据写入到CSV的文件中。在Python中,读取csv文件使用到的标准库是csv&am…...
简单的视频网站能不能用dw做/谷歌google官网
我觉得docker最大的便利性体现在可以实现镜像共享,方便团队在同一环境下开发。当然docker的强大之处不止于此。 接下来我用一个例子来演示如何进行docker镜像共享,步骤如下(Ubuntu): 准备工作:首先确定已经…...
传媒公司 网站开发/青岛seo关键字排名
平时工作中公司发的一些文件资料都会添加上水印,为了防止资料泄密外传,所以加水印能让员工知道资料的重要性,那么在Word中加水印很简单,但是换做是Excel表呢?有人说在Excel中是无法添加水印了,其实是可以的…...