我现在在搞AT指令操作短信猫的。有时候我使用SerialPort.Read或者ReadExisting读数据出错了,然后接下来的读取都会被阻塞了,意思是说线程就挂在那里了,界面假死并不是什么大问题,主要是他出一次错之后就没办法正常工作了,然后要人工的打开超级终端,输入一个at,然后才可以。这怎么办啊??!!

解决方案 »

  1.   

    SerialPort.Read的时候try一下做异常捕获再处理啊。
      

  2.   


    是这个代码:
            public string GetSMS()
            {
                System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort("COM1", 9600);
                sp.Open();
                sp.DiscardInBuffer();
                sp.Write("at+cmgl=\"ALL\"\r");
                sp.DiscardInBuffer();
                int tick = Environment.TickCount;
                int timeout = 60000;
                bool at_finish = false;
                StringBuilder sb = new StringBuilder();
                while (Environment.TickCount - tick < timeout && !at_finish)
                {
                    sb.Append(sp.ReadExisting());
                }
                sp.Close();
                string result = sb.ToString();
                return result;
            }http://topic.csdn.net/u/20101126/15/f292f2ee-b5da-41e9-8c75-7da52cb50edb.html
      

  3.   

    sp.Write("at+cmgl=\"ALL\"\r");
    sp.DiscardInBuffer();//这一句删掉试试。
      

  4.   

    你做一个异步读取,serial.DateRecived试试
      

  5.   

    sp.ReadExisting(),我觉得在ReadExisting之前应该判断下,缓冲区有没有数据
      

  6.   

    上一次的永远无法完成。我也不知道为什么。当然,别的指令是可以完成的,但是at+cmgl=\"ALL\"就是不完成