采用SerialPort类 如何判断超时。
比如发送取数据命令后,如果没有返回就认为超时??
怎么判断

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.readtimeout.aspx
      

  2.   

    本身都有超时属性的
    自己try啊
      

  3.   


    擦,瞎说readtimeout是说硬件驱动方面,读操作超时。跟这个压根不是一回事
    想知道你发的命令是否有应答。发完后,死等个一段时间,读串口看看。
      

  4.   

    1 线程做  先sleep多少毫秒后读串口 如果没读到东西 则超时
    2 事件驱动 配合timer
      

  5.   

    当然,我懒得敲而已
    看实际情况。可以
    int tick = Environment.TickCount;
    List<byte> buf=new List<byte>();
    while(Environment.TickCount-tick<超时毫秒)
    {
        int n = comm.BytesToRead;
        byte[] temp = new byte[n];
        comm.Read(temp,0,n);
        buf.Add(temp);
        //查找buf中是否有你要的内容
        if(有) 
        {
            //ok
            break;
        }
        else Thread.Sleep(100);//随便休息个时间
    }
    //超时
      

  6.   

    多谢,是一种思路,还有其它办法没有。
    我在VC编译环境下,发送完数据后,直接用事件CEvent 结合WaitForSingleObject(hEvent,3000)
    就可以判断,是否超时了。
      

  7.   

    er...
    和语言无关的。你vc中如果用mscomm32.ocx,那和.net一样,估计你vc是自己写监听线程的。
    如果自己写监听线程,你可以考虑在c#中,增加一个定时器,到时间执行某个方法,如果这之间已经收到了应答,就取消定时器。
      

  8.   

    你可以实现定义一个操作事件Timeout,
    System.Threading.Thread.Sleep(1000);//等待命令执行情况
                        TimeOut++;
                        Console.WriteLine(TimeOut);
                        if (TimeOut > 5)
                        {
                            System.Windows.Forms.MessageBox.Show("SendCmd数据超时");
                            //CurrentCmdStatus = true;
                            return false;
                        }