1. 程式人生 > >C#獲取本機串列埠引數(適合初學者參考)

C#獲取本機串列埠引數(適合初學者參考)

在C#中實現串列埠相比VC下容易很多,只要在工具欄中拖一個串列埠控制元件,設定好串列埠號即可開始工作。
如果是在後臺執行串列埠通訊,那麼簡單的設定已經足夠了。
當然,我們如果想讓這個串列埠有比較友好的介面設定那麼,我們在實現的時候,往往需要把介面上增加一些串列埠屬性引數的設定框。
一、串列埠號選擇框的實現(最簡單的辦法列舉有所串列埠號)
我在網上見到過很多利用登錄檔或者System.Management來獲取本機所有可用串列埠號的程式碼,給我的感覺都有捨近求遠的嫌疑。這裡我們用樸實的方法,一句話搞定:
string[] sps = SerialPort.GetPortNames();
comboBox1.Items.AddRange(sps);
這個方法必須保證引入System.IO.Ports;


我們平時不怎麼用串列埠的人可能對這個方法不太熟悉,這裡提供官方的連結,一看就懂;
SerialPort官方連結
二、波特率及停止位的選擇框的實現
我仔細的找了官方的文件,沒有發現可以直接枚舉出來的屬性和方法,那麼這裡只能自己建立列舉,這裡寫出來,大家拷貝後即可使用,程式碼如下:

/// <summary>
        /// 串列埠資料位列表(5,6,7,8)
        /// </summary>
        public enum SerialPortDatabits : int
        {
            FiveBits = 5,
            SixBits = 6,
            SeventBits = 7,
            EightBits = 8
        }

        /// <summary>
        /// 串列埠波特率列表。
        /// 75,110,150,300,600,1200,2400,4800,9600,14400,19200,28800,38400,56000,57600,
        /// 115200,128000,230400,256000
        /// </summary>
        public enum SerialPortBaudRates : int
        {
            BaudRate_75 = 75,
            BaudRate_110 = 110,
            BaudRate_150 = 150,
            BaudRate_300 = 300,
            BaudRate_600 = 600,
            BaudRate_1200 = 1200,
            BaudRate_2400 = 2400,
            BaudRate_4800 = 4800,
            BaudRate_9600 = 9600,
            BaudRate_14400 = 14400,
            BaudRate_19200 = 19200,
            BaudRate_28800 = 28800,
            BaudRate_38400 = 38400,
            BaudRate_56000 = 56000,
            BaudRate_57600 = 57600,
            BaudRate_115200 = 115200,
            BaudRate_128000 = 128000,
            BaudRate_230400 = 230400,
            BaudRate_256000 = 256000
        }

其餘的屬性,相對簡單也不常用,這裡不再贅述。

 public Form1()
        {
            InitializeComponent();
             //獲取串列埠號     
            string[] sps = SerialPort.GetPortNames();
            comboBox1.Items.AddRange(sps);
            comboBox1.SelectedIndex=comboBox1.Items.Count-1;
            serialPort1.PortName = comboBox1.Text;
            //獲取波特率
            SerialAttributeInfo.SetBauRateValues(comboBox2);
            //注意,在用indexof時要將數字轉為字串,否則找不到
            comboBox2.SelectedIndex = comboBox2.Items.IndexOf(serialPort1.BaudRate.ToString());
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text.Contains("O") && !serialPort1.IsOpen)
            {
                serialPort1.Open();
                             
                textBox1.Text = serialPort1.ReadChar().ToString();
                button1.Text = "關閉串列埠[&C]";
            }
            else
            {
                serialPort1.Close();
                button1.Text = "開啟串列埠[&O]";
            }
            
        }

簡單設定好後,我們就可以進行串列埠通訊了
執行效果如下圖:
在這裡插入圖片描述
開啟串列埠後可以收到串列埠的資料
在這裡插入圖片描述
這裡的程式很簡單,如果要比較好的實現時事通訊,那麼最好用ReadBufferSize結合線程來控制讀寫。如果只需要簡單的通訊,也可以結合計時器來實現。這裡不再深入討論。