如何保持一段代码一直在执行?

电动飞机制造商 2021-02-18 11:29:25
C#代码给我的感觉是只执行一次。一般地,C#代码是和界面里的控件关联,后者点击一下,相应的代码就执行一下。但是许多地方的控件不会一直点击,而只会点击一次,那如何保证其关联的代码能得到持续性地运行?
...全文
1847 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
YBcsdn1996 2021-03-08
  • 打赏
  • 举报
回复
while true 是神器
良朋 2021-03-08
  • 打赏
  • 举报
回复
如果你用while 循环,里面等待PLC数据时同样还要有while循环,哪怕你新开线程,也离不开while循环。 建议你用timer + swith case 轮询的方式处理。
心蓝168 2021-03-07
  • 打赏
  • 举报
回复
1、定时刷新服务 2、Socket 3、MQTT
changjiangzhibin 2021-03-05
  • 打赏
  • 举报
回复
写个“死”循环,中间加个自己可控的跳出循环的机制,例如按下ESC键
wanghan226 2021-03-04
  • 打赏
  • 举报
回复
创建timer类,触发后可持续运行直到后续代码停止。
wmycom 2021-03-03
  • 打赏
  • 举报
回复
楼主的问题,其实很简单,比如你的PLC 用串口通讯的,你就在C#里 加一个serialPort 监听,然后加个委托事件,并且加上几个定义的全局变量(比如一个bool 值默认为false),当你的serialport 监听 获得串口传过来的信号是你要的命令时,可以把这个全局变量改为true,你就将获得的数据解析丢给委托,委托里可以写while循环,当你的全局变量为true时,就一直循环跑你要做的事情,做完了之后,就 break 跳出 循环,等待下一次命令。
西红市番茄 2021-03-03
  • 打赏
  • 举报
回复
如果程序一直在电脑上运行的话,可以试一下放个定时器,然后读取电脑时间,使程序定时刷新。如果对速度和时序要求高的话则不行。
  • 打赏
  • 举报
回复
一直循环就是while(true)死循环,无限刷新,里面加上判断条件,满足就执行一次
  • 打赏
  • 举报
回复
引用 28 楼 飞天凤凰601 的回复:
兄弟,如果我告诉你,我也写过上位机 有一个项目:一边要接收PLC发来的串口信息,一边要接收从网络传来的数据,你用循环,你怎么做?而且工作模式有多种。用循环根本解决不了问题,用循环你会崩溃掉。 我没有用一个死循环,只是在执行固定任务时,使用了线程而已。
那你用什么呢
飞天凤凰601 2021-03-02
  • 打赏
  • 举报
回复
兄弟,如果我告诉你,我也写过上位机 有一个项目:一边要接收PLC发来的串口信息,一边要接收从网络传来的数据,你用循环,你怎么做?而且工作模式有多种。用循环根本解决不了问题,用循环你会崩溃掉。 我没有用一个死循环,只是在执行固定任务时,使用了线程而已。
冰思雨 2021-02-26
  • 打赏
  • 举报
回复
数据的同步更新和后台任务是两个概念。 数据的同步更新,需要一个更新机制: 比如,客户端的数据来自于服务端,那么,如果服务端的数据有了变化,就要通知到客户端。 一般采用“推”或者“拉”的方式。 “推”,即消息推送,客户端要向服务端建立一个长连接,数据连接,服务端在数据变更时,将变更数据推送至前端。 “拉”,即消息拉取,客户端周期性的向服务端拉取数据,如果前后两次拉取的数据不一致,则更新(刷新)客户端数据。 后台任务是指不被用户感知的一些任务,一般由程序员创建线程来实现。 后台任务的执行(生命周期)也是要着重考虑的,很忌讳有死循环的存在,有时候会影响到进程无法结束,产生僵尸进程。 楼主要先理清思路,弄清楚具体的需求和要解决的核心问题,之后,再着手考虑实现方案。
allenho821 2021-02-26
  • 打赏
  • 举报
回复
直接找一个实际案例来谈谈呀
six2me 2021-02-24
  • 打赏
  • 举报
回复
给你一个思路吧,先抛开你的plc的思路,将你的plc理解成一个终端,无非就是想开发一个上位机程序,用于和终端正常通讯,并能在线监测终端数据,plc终端大多数采用modbus规约,你弄plc的应该明白,这样就变成你要用c#编写一个串口通讯程序,用modbus协议和终端通讯,先不要考虑多个,先考虑和一个终端通讯,至于你说的一直执行,必须采用线程模式,在线程中采用while就可以,我经常这么做,好处是不影响你的其他操作,并且好控制。
xiaoxiangqing 2021-02-24
  • 打赏
  • 举报
回复
放在for循环里就行了吧
lyjk1984723 2021-02-24
  • 打赏
  • 举报
回复
有个东西叫Timer
wanghui0380 2021-02-23
  • 打赏
  • 举报
回复
你一直强调plc如何如何,C#不能如何如何 核心区别: 你plc是一块板子,你自己一块板子玩不涉及多机通讯。 就像我们说我们C#接声卡录音,接摄像头录像---这个操作C#需要定时轮询么?不需要,那是声卡驱动,摄像头驱动直接推到系统的,也不涉及多机。 那么问题来了,你弄两块plc板子,让这两块plc之间通讯,现在你还要说plc自己50ms扫描么,很明显你扫描不到另外板子的东西(当然你要说我弄个干接点信号跨接,你就当我没说)
wanghui0380 2021-02-23
  • 打赏
  • 举报
回复
好几个帖子了。你始终不明白的是,下层决定上层。 信号采集有推拉,信号采集有协议 比如: 主动拉的:楼上说的modbus,Modbus​是​使用​主从关系​实现​的​请求 - 响应​协议(而且规定从机只能应答,不能主从发送),也就是另一个帖子告诉你那个rscoket接口对应的 request/response 方法,所以他必须有主机发起响应。所以主机部分必须自己定时发起请求 被动接收的:比如华为的电话信号交换机,com连上,信号交换机自己对上发“主叫,被叫,通话时长”,这种不需要你做什么定时循环,你只需要做异步的被动接收,对应Rsocket接口的那个requestChannel方法(说这个方法有些勉强,这个是任意双向,用这里可以) 发布/订阅模式的:比如西门子的S7协议的订阅模式
引用
在S400系列中,实现了所谓的循环数据I/O功能,这类似于传统的发布者 - 订阅模型。PC可以订阅某些事件,而不是PLC 定期推送所请求的数据送到网络。还有一个合作伙伴(Partner )或点对点模型,当一个活动的合作伙伴请求连接并调用阻止发送(Block Send),与此同时被动合作伙伴调用阻止接收(Block Receive)方法。
也就是你连上,然后你发送一个订阅事件给下位机,事件发生下位机主动发送事件消息给pc端 这种对应Rsocket接口的 requestStream方法 所以我们不是讨论是C#弱智没有plc的中断轮询,我们讨论的是,你底下给我们什么
派大奇 2021-02-23
  • 打赏
  • 举报
回复
引用 17 楼 电动飞机制造商 的回复:
[quote=引用 13 楼 派大奇 的回复:]看了楼主 好几个提问了 不得不说 1. 如果楼主是自己学习 C# 可以从 基础学学 有很多概念 比如这个问题就可以看看 事件 的作用,(猜测你想 接取modbus协议信息) 也又很多现成的控件可调用 2. 如果楼主是给自己项目开发,真心劝 招一个专业的开发吧 , 我目前就是接手了一个 电器工程师 开发的C# 后台软件 恶心他妈给恶心开门啊,全是bug
我是自学C#,想开发上位机从PLC里读写数据。不过我不是用来做公司项目的,公司的项目不需要上位机。我纯粹是自学求上进的,是为了提高自己的水平。老板要是想开发上位机,我自然不会去应募,那会害了老板。这事我不会去做。我只有C#完会掌握了才会毛遂自荐地做项目。 主题的来源是:PLC里的数据是时时改变的,那C#如何知道?PLC自己有50ms的扫描时间,可以及时地知道外部传感器的变化(比如从1变成0了,或者相反),而这种50ms的扫描是机器自带的功能,不需要电气师去编程什么的。但是C#就不一样了,C#没有50ms的扫描功能,所以就很难实现实时地监视PLC的信号(监视到了PLC的信号,也就是监视到了外部传感器的信号)[/quote] 自己学习很好多多了解上位机编程,我们公司目前做的功能和你的类似,但这种PLC数据采集并没有什么技巧可言,我目前的做法是多线程+ timer轮训 来给PLC发 modbus 03指令 获取相应数据 多线程的原因是我们有很多PLC设备(200多个不同项目 每个项目1个PLC)
X-i-n 2021-02-22
  • 打赏
  • 举报
回复
买一本入门的书,从第一页开始读。你之前PLC开发的经验对学C#来说半点用都没有,把杯子倒空。想着走捷径,用以前所谓的经验来套到一个完全不同的领域,只会事倍功半。从你问的问题里也可以看出来这一点。
  • 打赏
  • 举报
回复
引用 13 楼 派大奇 的回复:
看了楼主 好几个提问了 不得不说 1. 如果楼主是自己学习 C# 可以从 基础学学 有很多概念 比如这个问题就可以看看 事件 的作用,(猜测你想 接取modbus协议信息) 也又很多现成的控件可调用 2. 如果楼主是给自己项目开发,真心劝 招一个专业的开发吧 , 我目前就是接手了一个 电器工程师 开发的C# 后台软件 恶心他妈给恶心开门啊,全是bug
我是自学C#,想开发上位机从PLC里读写数据。不过我不是用来做公司项目的,公司的项目不需要上位机。我纯粹是自学求上进的,是为了提高自己的水平。老板要是想开发上位机,我自然不会去应募,那会害了老板。这事我不会去做。我只有C#完会掌握了才会毛遂自荐地做项目。 主题的来源是:PLC里的数据是时时改变的,那C#如何知道?PLC自己有50ms的扫描时间,可以及时地知道外部传感器的变化(比如从1变成0了,或者相反),而这种50ms的扫描是机器自带的功能,不需要电气师去编程什么的。但是C#就不一样了,C#没有50ms的扫描功能,所以就很难实现实时地监视PLC的信号(监视到了PLC的信号,也就是监视到了外部传感器的信号)
加载更多回复(16)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧