我初学C#,现在遇到了一个很棘手的问题:我软件向主机通过串口发一串数据,如果主机在5秒内无数据返回则判断其超时,这段程序该怎么写?
    这是我的接收程序:
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            int i = 0; 
            i = this.serialPort1.BytesToRead;
            CheckForIllegalCrossThreadCalls = false;
            this.textBox1.Text += this.serialPort1.ReadExisting();
        }    

解决方案 »

  1.   

    你可以设置SerialPort.ReadTimeout属性
    但是这个属性只在你使用阻塞的方式调用Read方法的时候起作用,当然你可以自己开一下线程去处理Read
    如果想要在DataReceived事件里处理里TimeOut只能自己用Timer去做
      

  2.   

    用timer,5秒检查一次标记,如果收到数据(datareceived事件中设置标记为true),则在timer中检查,反之在timer中发现标记没有被设置过。则说明没数据。时间也到了。
      

  3.   

     在接收事件里写啊
     定义一个标识 ,用来描述有没有接收
    定义一个标识,描述是否超时
     定义一个timer,用来管理超时标识,在发送命令后启动它
    如果接收标识为假,并且超时标识为真 ,则超时
    至于5秒 ,在  timer里加个计数器就行了