public void Read()         //等待读取串口接收的数据的线程 处理函数
        {
            int i = 0;
            int[] w1 = new int[20];//存放读出来的重量
           
            string w = "";
           
            while (_continue)
            {
                try
                {
                    //阻塞到读取数据或超时(这里为2秒)
                    int bytesRead = serialPort1.BytesToRead;
                    serialPort1.WriteTimeout = 200;
                    byte[] bytesData = new byte[bytesRead];
                    serialPort1.Read(bytesData,0,bytesData.Length);
                    w =System.Text.Encoding.ASCII.GetString(bytesData);
                    
                     if (w != "" && w.Length >10)
                       {
                           string a = w.Substring(5, 6);
                     
                           lbKgContent.Items.Add("--------------------------------");
                           lbKgContent.Items.Add("采集到的数据:" + a+ "公斤 ||  " + "当前时间:" + DateTime.Now.ToString());
                        
                           lbKgContent.SelectedIndex = lbKgContent.Items.Count - 1;
                           w1[i] = int.Parse(a.Trim());
                           i++;
                     }
                       else 
                     {
                                       
                       //  lbKgContent.Items.Add("数据采集中……");
                        // lbKgContent.SelectedIndex = lbKgContent.Items.Count - 1;
                     
                    }
                }
                catch (TimeoutException) { }            }
            //获取数组中的最大值
           
            
        }
此为地磅程序,地磅终端不停的向COM串口发送数据(也就是说这个循环是死循环),数据处理之后为0,我在程序中以判断了,即当地磅采集到重量数据之后会发送一些大于0的数据,我已经将这些数据放到数组之中了。想在这些数组中取出最大值。望各位赐教。

解决方案 »

  1.   

    既然while (_continue)是个死循环,那么这里走不到你要取数组中最大值的地方,或者说走到这个地方线程就退出了,你再取最大值也没用,个人认为你应该在serialPort1.Read(bytesData,0,bytesData.Length);之后取最大值进行处理,
      

  2.   


    int maxweight=w1[0];
    foreach(int weight in wl)
    if(weight>maxweight)maxweight=weight;
      

  3.   

      int[] w1 = new int[20];
      int b=w1.Max();