• 定时器DispatcherTimer 和Timer 的区别(实际项目问题解决)


    问题现象

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

    实现什么功能

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

    涉及三个对象

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

    实现思路:

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

    具体出现的问题

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

    解决方法

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

    总结

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

  • 相关阅读:
    mysql 基础sql语句
    mysql存储引擎概述
    docker命令总结
    python链接postgresql
    Log4.net示例
    postgresql 使用游标笔记
    npm常用命令
    Nginx命令
    Ubuntu命令总结
    NHibernate总结
  • 原文地址:https://www.cnblogs.com/peijia/p/14365836.html
Copyright © 2020-2023  润新知