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 则是另外一个线程跑,不会发生上面的情况。

  • 相关阅读:
    bzoj 3243: [Noi2013]向量内积
    bzoj 4818: [Sdoi2017]序列计数
    AtCoder Grand Contest 023 F
    bzoj 4573: [Zjoi2016]大森林
    bzoj 5305: [Haoi2018]苹果树
    bzoj 5298: [Cqoi2018]交错序列
    codeforces496C
    codeforces534B
    牛客小白月赛13
    codeforces605A
  • 原文地址:https://www.cnblogs.com/peijia/p/14365836.html
Copyright © 2011-2022 走看看