久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2593|回復: 9
收起左側

C#上位機程序 索引超出數組界限?

[復制鏈接]
ID:1023010 發表于 2022-5-9 15:47 | 顯示全部樓層 |閱讀模式
50黑幣
51hei圖片20220509155053.png
運行上位機,十秒不到就崩,不知道怎么解決?求助

原碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 上位機demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Thread th = new Thread(Serial);
            th.IsBackground = true;
            th.Start();
            Control.CheckForIllegalCrossThreadCalls = false;
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            string s = " ";
            textBox1.Text = s;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                    button1.Text = "打開串口";

                }
                else
                {
                    serialPort1.PortName = comboBox1.Text;
                    serialPort1.BaudRate = 115200;          //波特率
                    serialPort1.DataBits = 8;               //數據位
                    serialPort1.Parity = System.IO.Ports.Parity.None;
                    serialPort1.StopBits = System.IO.Ports.StopBits.One;
                    serialPort1.Open();     //打開串口
                    button1.Text = "關閉串口";

                }
            }
            catch
            {
                serialPort1 = new System.IO.Ports.SerialPort();
                //刷新COM口選項
                comboBox1.Items.Clear();
                comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
                //響鈴并顯示異常給用戶
                System.Media.SystemSounds.Beep.Play();
                button1.Text = "打開串口";
            }
        }
        //串口掃描
        void Serial(object o)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            if (comboBox1.Text == "")
            {
                comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
            }
        }
        int listCount = 0;

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                string str;
                string data = string.Empty;

                this.Invoke((EventHandler)(delegate
                {

                    data = serialPort1.ReadExisting();
                    str = data.Substring(0, 1);
                    //  1/10/20/30/40/1/1/1
                    string[] info = data.Split('/');
                    //下位機數據發送格式
                    //將數據顯示
                    // textBox1.Text = info[1];
                    //textBox2.Text = info[2];
                    if (str == "2")
                    {
                        ListViewItem item = new ListViewItem();      //先實例化ListViewItem這個類
                        listCount++;
                        string s1 = listCount.ToString();
                        item.Text = s1;                 //序號

                        //item.SubItems.Add(Convert.ToString((Convert.ToInt32(info[1]) + Convert.ToInt32(info[3])) / 2));     //溫度1
                        //item.SubItems.Add(Convert.ToString((Convert.ToInt32(info[2]) + Convert.ToInt32(info[4])) / 2));     //溫度1
                        item.SubItems.Add(info[5]);     //煙霧濃度
                        item.SubItems.Add(info[6]);     //存在火焰

                        int cmd = Convert.ToInt32(info[1]);
                        if (cmd != 0)
                        {
                            textBox1.Text = info[1] + "℃";//溫度1
                            textBox2.Text = info[2] + "%RH";//濕度1
                        }
                        textBox3.Text = info[3] + "lx";//光強              
                    }
                    if (str == "1")
                    {
                        ListViewItem item = new ListViewItem();      //先實例化ListViewItem這個類
                        listCount++;
                        string s1 = listCount.ToString();
                        item.Text = s1;                 //序號

                        //item.SubItems.Add(Convert.ToString((Convert.ToInt32(info[1]) + Convert.ToInt32(info[3])) / 2));     //溫度1
                        //item.SubItems.Add(Convert.ToString((Convert.ToInt32(info[2]) + Convert.ToInt32(info[4])) / 2));     //溫度1
                        item.SubItems.Add(info[5]);     //煙霧濃度
                        item.SubItems.Add(info[6]);     //存在火焰

                        textBox4.Text = info[4] + "%";//煙霧濃度

                        int cmf = Convert.ToInt32(info[2]);
                        if (cmf < 10000)
                        {
                            textBox5.Text = info[5] + "μg/m3";//PM2.5} }


                        }
                    }
                }
                   )
                );
            }
            catch (Exception ex)
            {
                //響鈴并顯示異常給用戶
                System.Media.SystemSounds.Beep.Play();
                MessageBox.Show(ex.Message);

            }
        }


        int listCount1 = 0;

        private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                string str;
                string data = string.Empty;

                this.Invoke((EventHandler)(delegate
                {

                    data = serialPort1.ReadExisting();
                    str = data.Substring(0, 1);
                    //  1/10/20/30/40/1/1/1
                    string[] info = data.Split('/');
                    //下位機數據發送格式
                    //將數據顯示
                    // textBox1.Text = info[1];
                    //textBox2.Text = info[2];
                    if (str == "2")
                    {
                        ListViewItem item = new ListViewItem();      //先實例化ListViewItem這個類
                        listCount1++;
                        string s1 = listCount.ToString();
                        item.Text = s1;                 //序號

                        //item.SubItems.Add(Convert.ToString((Convert.ToInt32(info[1]) + Convert.ToInt32(info[3])) / 2));     //溫度1
                        //item.SubItems.Add(Convert.ToString((Convert.ToInt32(info[2]) + Convert.ToInt32(info[4])) / 2));     //溫度1
                        item.SubItems.Add(info[6]);     //煙霧濃度
                        item.SubItems.Add(info[7]);     //存在火焰

                        textBox1.Text = info[1] + "℃";//溫度1
                        textBox2.Text = info[2] + "%RH";//濕度1
                                                        //textBox6.Text = info[3] + "℃";//溫度2
                                                        // textBox7.Text = info[4] + "%RH";//濕度2
                        textBox3.Text = info[3] + "lx";//光強
                        textBox4.Text = info[4] + "%";//煙霧濃度
                        textBox5.Text = info[5] + "μg/m3";//PM2.5
                    }
                }
                   )
                );
            }
            catch (Exception ex)
            {
                //響鈴并顯示異常給用戶
                System.Media.SystemSounds.Beep.Play();
                MessageBox.Show(ex.Message);

            }
        }


        private void textBox6_TextChanged_1(object sender, EventArgs e)
        {

        }
      



        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void groupBox3_Enter(object sender, EventArgs e)
        {

        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void groupBox3_Enter_1(object sender, EventArgs e)
        {

        }

      
        private void label14_Click(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

回復

使用道具 舉報

ID:277550 發表于 2022-5-9 17:21 | 顯示全部樓層
就是收到的數據沒那么多,或者分多次(分段)上傳了
回復

使用道具 舉報

ID:1023010 發表于 2022-5-10 19:23 | 顯示全部樓層
devcang 發表于 2022-5-9 17:21
就是收到的數據沒那么多,或者分多次(分段)上傳了

那具體應該怎么修改?
回復

使用道具 舉報

ID:1023010 發表于 2022-5-10 19:54 | 顯示全部樓層
大佬們,代碼應該怎么修改呀?
回復

使用道具 舉報

ID:883242 發表于 2022-5-10 21:17 | 顯示全部樓層
增加item.SubItems的數量。
回復

使用道具 舉報

ID:1023010 發表于 2022-5-13 20:07 來自手機 | 顯示全部樓層
最后是用if(info.length>=7){}將傳感器代碼括起來解決問題的
回復

使用道具 舉報

ID:203661 發表于 2022-5-14 11:56 | 顯示全部樓層
把工程傳上來看看
回復

使用道具 舉報

ID:1026496 發表于 2022-5-14 17:18 | 顯示全部樓層
                    string[] info = data.Split('/'); 這個里面的' ' 改成雙引號
回復

使用道具 舉報

ID:1023010 發表于 2022-5-17 09:53 | 顯示全部樓層
下位機程序

室內環境監測下位機.7z

4.79 MB, 下載次數: 7

回復

使用道具 舉報

ID:1023010 發表于 2022-5-17 09:56 | 顯示全部樓層
yaoyao2022 發表于 2022-5-14 17:18
string[] info = data.Split('/'); 這個里面的' ' 改成雙引號

這樣會出錯
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 91| 天天干b | 国产 日韩 欧美 中文 在线播放 | 99久久精品国产一区二区三区 | 精品久久久久久久久久久久久久 | 日韩精品一区二区三区视频播放 | 黑人精品欧美一区二区蜜桃 | 午夜影院在线观看视频 | 欧美日韩一区二区在线观看 | 羞羞的视频在线看 | 在线视频成人 | 午夜精品一区二区三区在线观看 | 久久a久久| 亚洲精美视频 | 久久视频精品 | 国产成人黄色 | 午夜视频大全 | 国产精品自产拍 | 这里精品 | 亚洲在线一区二区 | 人人看人人搞 | 欧美三区在线观看 | 99视频在线免费观看 | 日韩精品一区二区久久 | 国产精品一区二区三区久久久 | 免费国产黄 | 91精品国产综合久久久亚洲 | 精品国产一区二区在线 | 亚洲三级在线观看 | 免费三级网 | 久久中文字幕一区 | 亚洲欧美视频在线观看 | 欧美性一区二区三区 | 亚洲一区二区在线播放 | 国产精品久久久久久久久久久新郎 | 九九热精品在线视频 | 久久99精品久久久久久噜噜 | 国产精久久久久久 | 欧美日韩在线成人 | 人人干人人干人人 | 欧美日本在线观看 |