问题如标题,代码如下:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //定义变量
            byte[] BufferBytes;
            string[] Data;            int Count;
            Count = serialPort1.BytesToRead;            //得到数据
            BufferBytes = new Byte[Count];
            serialPort1.Read(BufferBytes, 0, Count);            for (int i = 0; i < Count; i++)
            {
                ReceivedString = ReceivedString + BufferBytes[i] + " ";
            }            Data = ReceivedString.Split(new string[] { " " }, StringSplitOptions.None);            //获取10组数据进行比较,数据是分组的,len是一组长度
            if (Data.Length > (len * 10 + 10))
            {
                if (Data[0] == "255" && Data[1] == "170")
                {
                    CheckData(Data);
                    ReceivedString = "";
                }
                else
                {
                    string[] a;
                    a = null;
                    do
                    {
                        if (a != null)
                            Data = a;
                        a = new string[Data.Length - 1];
                        Array.ConstrainedCopy(Data, 1, a, 0, Data.Length - 1);
                    }
                    while ((a[0] == "255" && a[1] == "170") == false);
                    Data = a;
                    CheckData(Data);
                    ReceivedString = "";
                }
            }
        }
  private void CheckData(string[] Data)
        {
            int max;
            int mobilenumber;
            max = 0;
            mobilenumber = 0;
            int i;
            int curmobilenumber = 0;
           
            //取场强最大的5组数
            while (true)
            {
                for (int j = 0; j < 5; j++)
                {
                    for (i = 0; i < len * 10; i = i + len)
                    {
                        //判断是否有数据丢失
                        if (Data[i] == Data[i + len])
                        {
                            //得到最大场强并记下
                            if (max < Convert.ToInt16(Data[i + len - 1]))
                            {
                                curmobilenumber = i;                                max = Convert.ToInt16(Data[i + len - 1]);
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    if (max > 130)
                    {
                        Data[curmobilenumber + len - 1] = "0";
                        mobilenumber = Convert.ToInt16(Data[curmobilenumber + 2]) * 250 + Convert.ToInt16(Data[curmobilenumber + 3]);
                        str = Convert.ToString(Data[i + 4]);
                        list.Add(mobilenumber);
                        list1.Add(str);
                        max = 0;
                    }
                }                if (list.Count >= 1)
                {
                    this.Invoke(new delegatechange(setinfo));
                    Thread.Sleep(10000);
                }
            }
        }

解决方案 »

  1.   

       list.Add(mobilenumber); 
       list1.Add(str); 这里你能通过吗?
    在串口接收处理的线程里面是不能直接操作主窗体控件的.
     Thread.Sleep(10000); 把这句去掉看看
      

  2.   


    为什么要停?
    停止后,有数据到达可能也不触发DataReceived了!
      

  3.   

    这里使用Thread.Sleep(10000); 后,主线程好像已经休眠了,你怎么能读数据啊!!
      

  4.   

    Thread.Sleep(10000); 睡了10秒,醒了就退出猪线程,当然子线成也就销毁了,当然不读了,
      

  5.   

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 这应该是个单独的线程。最简单的方法是 添加 
    serialPort控件,然后再双击事件DataReceived。
      

  6.   

    是添加serialPort控件,也是双击事件DataReceived。