系统需要连接地秤的串口,操作com3口,打开没问题,就是关闭本窗体的时候,整个程序也退出了,什么办法解决呢?代码如下:
打开的代码: StringBuilder t = new StringBuilder(255);
            string path = Application.StartupPath + "\\cmocx.ini";
            int i = GetPrivateProfileString("dicheng", "open", "", t, 255, path);//是否打开地秤
            if (t.ToString() == "ok")
            {
                GetPrivateProfileString("dicheng", "ckh", "", t, 255, path);
                serialPort1.PortName = t.ToString();// comboBox1.Text;//COM4
                GetPrivateProfileString("dicheng", "botelv", "", t, 255, path);                serialPort1.BaudRate = Convert.ToInt32(t.ToString());//速率
                GetPrivateProfileString("dicheng", "csdw", "", t, 255, path);                serialPort1.DataBits = Convert.ToInt32(t.ToString());//数据位又叫数据的传输单位。
                serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位。
                serialPort1.Parity = System.IO.Ports.Parity.None;//无奇偶校验位。
                //无流控。(硬件设备)
                //串口线配置,3-线通讯方式,TxD,Rxd,GND.
                DialogResult dia = MessageBox.Show("地秤串口未正常打开", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dia == DialogResult.Yes)
                {
                    try
                    {
                        serialPort1.Open();
                        serialPort1.RtsEnable = true;
                    }
                    catch
                    {
                        MessageBox.Show("地秤串口未正常打开", "系统警告", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        //this.Close();
                        txt_db.Text = "0";
                    }
                }
            }
            else
                txt_db.Text = "0";
DataReceive代码:private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            Thread.Sleep(300);            //获取18个字节
            int bytes = serialPort1.BytesToRead;
            byte[] buffer = new byte[bytes];
            serialPort1.Read(buffer, 0, bytes);
            string str = "";
            //将ASCII码装换为字符
            for (int i = 0; i < bytes; i++)
            {
                string a1 = BitConverter.ToString(buffer, i, 1);
                int a2 = Convert.ToInt32(a1, 16);
                char a3 = (char)a2;
                str += a3;
            }
            string[] ss = str.Split(':');
            string jian = "";
            if (ss.Length == 1)
            {
                jian = ss[ss.Length - 1].Substring(4, 6);
            }
            if (ss.Length > 1)
            {
                jian = ss[ss.Length - 2].Substring(4, 6);
            }
            //string jian = ss[ss.Length - 1].Substring(4, 6);
            SetText(jian);
            if (bytes > 18000)
            {
                serialPort1.DiscardInBuffer();
                bytes = 0;
            }
        }
        delegate void SetTextCallback(string text);
        private void SetText(string text)
        {            if (this.txt_db.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            this.txt_db.Text = text.Trim();
            return;        }
窗体关闭的时候的代码            serialPort1.Close();
串口