在串口的DataReceived中向串口发送数据,能否立即触发 DataReceived 事件,然后再执行剩下的代码如下private string CommData = string.Empty;
        public void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            if (Sp.IsOpen)
            {
                byte[] readBuffer = new byte[Sp.ReadBufferSize];
                Sp.Read(readBuffer, 0, readBuffer.Length);
                CommData = System.Text.Encoding.Default.GetString(readBuffer);
                if (CommData.Length == 0)
                    return;                if (CommData.IndexOf("+CLIP:", 0) > 0)
                {
                    if (CommData.IndexOf(",,", 0) > 0)
                    {
                        label1.Text = "来电号码:" + GetRingNumber(CommData);
                    }
                }
                if (CommData.IndexOf("\"MT\"", 0) > 0 || CommData.IndexOf("\"SM\"", 0) > 0 || CommData.IndexOf("\"ME\"", 0) > 0)
                {
                    //读取短信内容
                    if (CommData.IndexOf("\"+CPMS\"", 0) < 0)
                    {
                        int smsIndex = GetSmsIndex(CommData);
                        string strOrder = "AT+CMGR=" + smsIndex.ToString() + "\r\n";
                        CommData = "";                        Sp.Write(strOrder); //能不能立即触发 Sp_DataReceived,读到返回的数据                        int currTime = 0;
                        int timeInc = 50;
                        while (currTime < 2000)
                        {
                            if (CommData.Trim() != "")
                            {
                                break;
                            }
                            else
                            {
                                Application.DoEvents();
                                System.Threading.Thread.Sleep(timeInc);                    
                                currTime = currTime + timeInc;
                            }
                        }                        if (CommData.Trim() != "")
                        {
                            //处理数据,执行不到这句
                        }
                    }
                }                
                if (CommData.IndexOf("+QMMNOTIFY:3", 0) > 0)
                {
                    //ReadMms(SportData);
                }
            }
        }

解决方案 »

  1.   

    if (CommData.IndexOf("\"+CPMS\"", 0) < 0)
                        {
                            int smsIndex = GetSmsIndex(CommData);
                            string strOrder = "AT+CMGR=" + smsIndex.ToString() + "\r\n";
                            CommData = "";                          System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(Send),strOrder );
    }
    public void Send(object obj)
    {
       string msg = (string)obj;
       sp.write();//....发送
    }
      

  2.   

    下面的while是做什么的,最好提出去。                        int timeInc = 50;
                            while (currTime < 2000)
                            {
                                if (CommData.Trim() != "")
                                {
                                    break;
                                }
                                else
                                {
                                    Application.DoEvents();
                                    System.Threading.Thread.Sleep(timeInc);                    
                                    currTime = currTime + timeInc;
                                }
                            }
      

  3.   

    请将问题表述得详细些,什么叫立刻触发DataReceived 事件,这个事件的触发不是我们能控制的,因此无法从这个方向入手,我要知道你要达到的效果,找其它方法实现。
      

  4.   


    我已经在事件中向串口发送数据了,是想让它立刻触发这个事件,而不是执行发送数据后面的代码问题已经解决 感谢 mabaolin