winform程序 读取不定时跟新的数据 界面需要同步显示 如何解决

wj7rrp98 2018-02-21 07:54:33
现在开发 机器人 监视软件 由于机器人状态不确定 获取其各轴角度的时候 角度更新时间不定 现在需要同步显示于界面上
用timer控件 卡死
不准备用数据库 因为我不会 求指导
...全文
1000 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj7rrp98 2018-02-28
  • 打赏
  • 举报
回复
使用递归可以不断获取数据 这种方法可以吗
Jason_Mao1 2018-02-28
  • 打赏
  • 举报
回复
首先time 可能比太可取,但是我建议你还是用 异步 线程,这样至少UI 不会卡死,用户体验会很好,至于你用不用数据库 那得看你想怎么设计此软件。
fengatj 2018-02-28
  • 打赏
  • 举报
回复
你加一张表A,用来记录哪张表的数据有变化,有表名和值两个字段,表名字段记录你要监控的表的表名,值字段记录这表数据是否有变化,有变化值为1,无变化则为0,这个操作可以用触发器实现。然后再通过timer轮询A表,毕竟这表的数据量不大,不会影响性能,只要查到值为1的表,即数据有变化的表,则重新去执行查这表的数据并展示,同时更新A表里面对应这表对应的值为0,即这表我已更新了,下次轮询不用再重新查它,不断执行就可以了
Nick黄 2018-02-28
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
[quote=引用 13 楼 wj7rrp98 的回复:] 我业余选手啊 第一次开始编啊 你们说的我都不懂啊
不懂没有关系,你知道有设计模式问题以后加入正规开发团队时引起注意就行了。 我们遇到过许多次,比如说某个很好的产品,突然某个新来的研究生自以为会编程,结果胡乱加入了一个50毫秒检测一次的 timer,结果系统软件就越来越卡。而假设这个时候整个团队的开发人员基本上都是那种只知道“各人自扫门前雪”的人,没有人曾经注意过学习好设计模式问题,那么他们也就不会及时汇报这颗老鼠屎坏了这一锅汤,那么这个软件系统就会持续一段时间都一直很卡,甚至可能造成用户、投资人不满,甚至造成“腾讯公司的一个做邮箱的团队的小产品反而把别的更专业的大团队的微信给淘汰了”的悲剧。 疯狂轮询是个坑爹的设计模式。要学会基本的事件驱动设计思想,这才刚刚开始学程序设计。[/quote]
大鱼> 2018-02-25
  • 打赏
  • 举报
回复
引用 3 楼 From_TaiWan 的回复:
机器人的状态数据是怎么传到软件的? 假如是通过串口来接收的,那么,等接受到数据后再更新到软件界面 不过无论怎么讲,“同步”显示数据,很难做到真正的同时,接收-显示,需要缓存下,可以考虑队列
+1
wj7rrp98 2018-02-25
  • 打赏
  • 举报
回复
引用 8 楼 pfworld 的回复:
使用backgroundWorker后台线程控件,可以解决你说的问题!
谢谢您的意见 我了解一下
wj7rrp98 2018-02-25
  • 打赏
  • 举报
回复
引用 3 楼 From_TaiWan 的回复:
机器人的状态数据是怎么传到软件的? 假如是通过串口来接收的,那么,等接受到数据后再更新到软件界面 不过无论怎么讲,“同步”显示数据,很难做到真正的同时,接收-显示,需要缓存下,可以考虑队列
ABB机器人公司提供的封装接口 来实现pc跟机器人之间的通信 我想了 时时同步确实很难做到 因为每次只能读取一次数据 轮询也不能实现同步
  • 打赏
  • 举报
回复
比如说“当某某数值改变是我要......,当某某集合增删单元时我要......,当用户在文本框输入时我要.......,当用鼠标移开某区域时我要........,当用户把窗体拖到 windows 桌面边缘时需要......,当网络中断后应该..............”等等等等无数的底层事件驱动概念。至于从业务逻辑出发的的事件驱动的描述就更多了。 那么没有学过真正软件设计的人,他满脑子就是用轮询的“while 循环+线程+自阻塞”或者timer来模拟那些事件驱动开发技术,他画出的流程图、状态图、消息时序图都是同步轮询的而不是事件驱动的,所以他写出的代码也就不可能是最终的一个真正的性能尚可的正规产品需要的代码。
wj7rrp98 2018-02-25
  • 打赏
  • 举报
回复
引用 3 楼 From_TaiWan 的回复:
机器人的状态数据是怎么传到软件的? 假如是通过串口来接收的,那么,等接受到数据后再更新到软件界面 不过无论怎么讲,“同步”显示数据,很难做到真正的同时,接收-显示,需要缓存下,可以考虑队列
引用 15 楼 sp1234 的回复:
[quote=引用 13 楼 wj7rrp98 的回复:] 我业余选手啊 第一次开始编啊 你们说的我都不懂啊
不懂没有关系,你知道有设计模式问题以后加入正规开发团队时引起注意就行了。 我们遇到过许多次,比如说某个很好的产品,突然某个新来的研究生自以为会编程,结果胡乱加入了一个50毫秒检测一次的 timer,结果系统软件就越来越卡。而假设这个时候整个团队的开发人员基本上都是那种只知道“各人自扫门前雪”的人,没有人曾经注意过学习好设计模式问题,那么他们也就不会及时汇报这颗老鼠屎坏了这一锅汤,那么这个软件系统就会持续一段时间都一直很卡,甚至可能造成用户、投资人不满,甚至造成“腾讯公司的一个做邮箱的团队的小产品反而把别的更专业的大团队的微信给淘汰了”的悲剧。 疯狂轮询是个坑爹的设计模式。要学会基本的事件驱动设计思想,这才刚刚开始学程序设计。[/quote]谢谢您的发言 我是否可以使用多线程 后台时时获取同时去除重复数据 然后跟新界面数据?
xuzuning 2018-02-25
  • 打赏
  • 举报
回复
你们说的我都不懂啊 这个很正常的,因为你并没有说明你是如何做的(至少应贴出一份可供测试的代码) 所以别人就只能根据自己的想法,天马行空的进行解答,越出你的知识范围是必然的
  • 打赏
  • 举报
回复
这里最基本的设计模式设计理念就是:当各轴角度没有读取时什么也不做,当各轴角度的简单属性发生改变时立刻去界面绘制(不管是同步还是异步处理)。根本不用什么 timer。
wj7rrp98 2018-02-25
  • 打赏
  • 举报
回复
引用 1 楼 daixf_csdn 的回复:
你数据量很大?一般timer够用了,也不至于卡死
对如果用timer只获取数据的话 不卡 但是涉及到 仿真 需要 模型的运动 跟 实际机器人的动作 同步 这样就造成了界面的卡顿
  • 打赏
  • 举报
回复
引用 13 楼 wj7rrp98 的回复:
我业余选手啊 第一次开始编啊 你们说的我都不懂啊
不懂没有关系,你知道有设计模式问题以后加入正规开发团队时引起注意就行了。 我们遇到过许多次,比如说某个很好的产品,突然某个新来的研究生自以为会编程,结果胡乱加入了一个50毫秒检测一次的 timer,结果系统软件就越来越卡。而假设这个时候整个团队的开发人员基本上都是那种只知道“各人自扫门前雪”的人,没有人曾经注意过学习好设计模式问题,那么他们也就不会及时汇报这颗老鼠屎坏了这一锅汤,那么这个软件系统就会持续一段时间都一直很卡,甚至可能造成用户、投资人不满,甚至造成“腾讯公司的一个做邮箱的团队的小产品反而把别的更专业的大团队的微信给淘汰了”的悲剧。 疯狂轮询是个坑爹的设计模式。要学会基本的事件驱动设计思想,这才刚刚开始学程序设计。
wj7rrp98 2018-02-25
  • 打赏
  • 举报
回复
这论坛 怎么回复啊
wj7rrp98 2018-02-25
  • 打赏
  • 举报
回复
我业余选手啊 第一次开始编啊 你们说的我都不懂啊
mk_lucifer 2018-02-25
  • 打赏
  • 举报
回复
怎么可能卡死,肯定是你代码的问题。。。 这个问题很简单。。最简单的方法流程。。 创建一个后台线程:线程的过程。。。

  AxisDatas old;
    void Porc()
    {
         AxisDatas  a=ReadData();   //读取所有
       if(IsEquals(old,a)==false)     //比对是否变化(函数自己完成),没变化不通知
      {
               old=a;
               MainWindow.BeginInoke(UpdatePorc ,a);     //UpdateProc是一个前台的更新函数,参数就是a,BeginInvoke是转到前台运行这个函数
       }
   }
UpdatePorc 需要内部的实现控制下更新频率,可以不每条更新到前台,加入1毫秒一次,能卡死你,可以间隔着来,控制在200毫秒一次就行。。。
正怒月神 2018-02-24
  • 打赏
  • 举报
回复
sqldependency 数据库通知服务
  • 打赏
  • 举报
回复
如果你不懂事件驱动设计,那么你起码有一多半基本的交互程序初步编程实习课程没有学过。你学的几乎所有的交互控件都是事件驱动的,结果你自己的接口负责“获取其各轴角度”时却不知道使用事件通知机制来通知监听的宿主,这就好像是一直是用头走路、用脚吃饭,一直是怎么搞软件开发?
养牛大人 2018-02-24
  • 打赏
  • 举报
回复
试下多线程,委托
pfworld 2018-02-24
  • 打赏
  • 举报
回复
使用backgroundWorker后台线程控件,可以解决你说的问题!
加载更多回复(7)

111,098

社区成员

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

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

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