首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阅读SerialPort I/O计时器c#视觉工作室2010年

阅读SerialPort I/O计时器c#视觉工作室2010年
EN

Stack Overflow用户
提问于 2013-04-28 05:22:03
回答 1查看 1.8K关注 0票数 0

我目前正在进行一个项目,在这个项目中,我正在使用SerialPort库从一个定制的PCB读取数据,该库位于VisualStudio2010 c#。

目前,我正试图通过单击按钮从设备读取作为字节数据提供给我的特定类型的数据,如果设备没有响应,则等待5秒才会超时。

但是,由于某种原因,计时器出现故障,并且通常在5秒之前过期,从而阻止有效数据的存储。下面是我的代码,有人能指出我的缺陷吗?我怀疑来自System.Windows.Forms.Timer的事件计时器函数是不正确的。

按钮单击

代码语言:javascript
复制
    bool flag = false;
    private void btnGetData_Click(object sender, EventArgs e)
    {

        string command = "*data#";//make string command to send
        sendCommand(command);
        flag = true;
        gui.Timer.Interval = timerlength;
        gui.Timer.Enabled = true;
        gui.Timer.Tick += new EventHandler(Timer_Tick);


    }

计时器事件处理程序

代码语言:javascript
复制
    private void readVarsTimer_Tick(object sender, EventArgs e)
    {
       if (flag == true)
        {
            flag = false;//set flag low
            print("Data Timer Expired, Run Command Again.");
            gui.Timer.Stop();//stop timer
            gui.Timer.Enabled = false; //event over
            timerlength = 5000;//reset timer

        }
    }

串口读取数据时,请假定串口设置是正确的,因为任何不使用定时器的传输或接收数据都能正常工作。

代码语言:javascript
复制
            if (flag == true)
            {
              //code to read data in, and parse to display in text boxes correct 
              flag = false; 
            }

其他重要注释:

  • 我有三种类型的数据,我可以期待从设备,所以我使用if/else的与标志设置了相应的按钮。因此,“标志”变量的全局声明。
  • 我还没有检测到串行口获取垃圾数据的问题,这些垃圾数据可能会把我抛出,我已经运行并对数据进行了足够的分析,从而知道我得到了正确的预期数据。
  • 当设备关闭时,这个计时器也是完美无缺的,它将持续整整5秒,然后过期。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-28 15:10:57

没有足够的代码打电话。但是有两个突出的基本问题:您可以启用可能已经启用的计时器。你的计时器太快过期了。更严重的问题是,您一直在添加事件处理程序。因此,计时器过期,则Tick事件处理程序将多次运行。

您只需要订阅一次蜱事件,就可以在类的构造函数中订阅。

在启动之前,你必须确保计时器是禁用的。通过将其启用的属性设置为false事件处理程序中的false,以及在收到响应时执行此操作。据推测,后者已经消失了。当InvalidOperationException已经启用时引发它-- btnGetData_Click()方法,因为如果是这样的话,它是一个逻辑错误。如果放弃获得响应的尝试是合法的,则先强制启用= false。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16259897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档