C#小练习:SerialPort读写操作

来源:互联网 发布:电脑打不开windows 编辑:程序博客网 时间:2024/05/20 23:07

上个礼拜做了一个使用C# SerialPort调试GSM模块的小练习,例子很简单。需要注意的是,SerialPort的配置必须正确,并且SerialPort的打开和读写可能需要等待一段时间(比如100ms)之后收到GSM模块的响应,也就是在这段时间内可能需要当前线程处于等待状态。


private void portConfigToolStripMenuItem_Click(object sender, EventArgs e)        {            if (serialPort1.IsOpen)            {                serialPort1.Close();            }            using (Form2 frm = new Form2())            {                if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)                {                                        try                    {                        XDocument doc = XDocument.Load(frm.FileName);                        this.serialPort1.BaudRate = int.Parse(doc.Descendants("BaudRate").FirstOrDefault<XElement>().Value);                        this.serialPort1.DataBits = Convert.ToInt32(doc.Descendants("DataBits").FirstOrDefault<XElement>().Value);                        this.serialPort1.PortName = doc.Descendants("PortName").FirstOrDefault().Value;                        this.serialPort1.StopBits = (System.IO.Ports.StopBits)(Enum.Parse(typeof(System.IO.Ports.StopBits), doc.Descendants("StopBits").FirstOrDefault().Value));                    }                    catch(Exception ex)                    {                        MessageBox.Show(ex.Message);                    }                }            }            try            {                serialPort1.Open();            }            catch(Exception ex)            {                MessageBox.Show(ex.Message);            }            System.Threading.Thread.Sleep(100);        }        private void Form1_Load(object sender, EventArgs e)        {            serialPort1.DataReceived += serialPort1_DataReceived;        }        void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)        {            this.richTextBox1.Text += "Received>> " + this.serialPort1.ReadExisting() + "\r\n";        }        private void button1_Click(object sender, EventArgs e)        {            if (!serialPort1.IsOpen)            {                MessageBox.Show("Please config the serial port firstly.");            }            else            {                serialPort1.Write(this.textBox1.Text);                this.richTextBox1.Text += "Send>> " + this.textBox1.Text + "\r\n";                int idx = 0;                if (serialPort1.BytesToRead == 0 && idx < 3)                {                    System.Threading.Thread.Sleep(100);                    idx++;                }            }        }        private void saveToolStripMenuItem_Click(object sender, EventArgs e)        {            string filename = "log.txt";            if (File.Exists(filename))            {                FileStream fs = new FileStream(filename, FileMode.Append);                StreamWriter sw = new StreamWriter(fs);                sw.Write(string.Format("\r\n==={0}===\r\n", DateTime.Now.ToFileTime()) + this.richTextBox1.Text);                //fs.Close();                sw.Close();            }            else            {                StreamWriter sw = new StreamWriter(filename);                sw.Write(string.Format("\r\n==={0}===\r\n", DateTime.Now.ToFileTime()) + this.richTextBox1.Text);                sw.Close();            }        }        private void exitToolStripMenuItem_Click(object sender, EventArgs e)        {            this.Close();        }


serial port配置form的代码:

private bool loadConfigFile(string filename)        {            if (File.Exists(filename))            {                XDocument doc = XDocument.Load(filename);                try                {                    this.textBox1.Text = doc.Descendants("BaudRate").FirstOrDefault<XElement>().Value;                    this.comboBox1.Text = doc.Descendants("DataBits").FirstOrDefault<XElement>().Value;                    this.comboBox2.Text = doc.Descendants("PortName").FirstOrDefault<XElement>().Value;                    this.comboBox3.Text = doc.Descendants("StopBits").FirstOrDefault<XElement>().Value;                }                catch                {                    MessageBox.Show(string.Format("Config file {0} has been destoryed.", filename));                    File.Delete(filename);                    return false;                }                return true;            }            else            {                return false;            }        }        private void okbtn_Click(object sender, EventArgs e)        {            if (File.Exists(filename))            {                XDocument doc = XDocument.Load(filename);                try                {                    doc.Descendants("BaudRate").FirstOrDefault<XElement>().Value = this.textBox1.Text;                    doc.Descendants("DataBits").FirstOrDefault<XElement>().Value = this.comboBox1.Text;                    doc.Descendants("PortName").FirstOrDefault<XElement>().Value = this.comboBox2.Text;                    doc.Descendants("StopBits").FirstOrDefault<XElement>().Value = this.comboBox3.Text;                    doc.Save(filename);                }                catch                {                    MessageBox.Show(string.Format("Config file {0} has been destoryed.", filename));                    File.Delete(filename);                }            }            else            {                XDocument doc = new XDocument();                doc.Add(new XElement("PortConfig", new XElement("BaudRate", this.textBox1.Text), new XElement("DataBits", this.comboBox1.Text),                    new XElement("PortName", this.comboBox2.Text), new XElement("StopBits", this.comboBox3.Text)));                doc.Save(filename);            }                    }        private void Form2_Load(object sender, EventArgs e)        {            loadConfigFile(filename);            string[] ports;            try            {                ports = SerialPort.GetPortNames();                comboBox2.Items.AddRange(ports);                comboBox2.SelectedItem = comboBox2.Items[0];            }            catch            {                MessageBox.Show("Failure occurs in get ports!");                this.cnlbtn.PerformClick();            }        }

0 0