zoukankan      html  css  js  c++  java
  • 定时器DispatcherTimer 和Timer 的区别(实际项目问题解决)

    问题现象

    好记性不如烂笔头,这里记录下开发自动机程序与扫描枪时出现的问题,以便日后查看。

    实现什么功能

    程序与PLC通讯,获知到达指定位置后,通知开启扫描枪,扫描的二维码和捆包信息关联录入系统。

    涉及三个对象

    1. 定时器
    2. 扫描枪的接受事件
    3. UI线程

    实现思路:

    定时器不断轮询获取相应地址值,获取到地址值后,关闭定时器,然后处理地址值,如果收到到达指定信号,通知扫描枪扫描。有个UI的字段会获取显示该二维码,该定时器线程会死循环获取该字段,超时则会跳出,该字段有值则会录入系统。

    具体出现的问题

    最开始使用的是 System.Windows.Threading.DispatcherTimer 的定时器,出现了扫描枪成功扫描到,但循环检测字段却一直是空,直到超时退出定时器的事件后才成功获取到值。

    解决方法

    后面定时器改用了 System.Timers.Timer 后,就可以成功读取到字段值了,也不会造成界面卡顿。

    总结

    System.Windows.Threading.DispatcherTimer 定时器其实是在UI主线程跑的,在里面执行死循环检测,会使界面卡顿,并且不能更新界面的字段。而
    System.Timers.Timer 则是另外一个线程跑,不会发生上面的情况。

  • 相关阅读:
    计网第一章——基本概念
    计网第二章——应用层
    命令行测试邮件发送工具mailsend-go
    CentOS-7-x86_64-DVD-2009 rpm包列表(centos7.9)
    CentOS-7-x86_64-Everything-2009 rpm包列表(CentOS7.9)
    Centos发行版ISO镜像中rpm包列表
    nginx使用记录
    centos resolv.conf
    python cookbook
    ansible中变量和主机名
  • 原文地址:https://www.cnblogs.com/peijia/p/14365836.html
Copyright © 2011-2022 走看看