C# 串口 實現 ini配置文件的保存

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Runtime.InteropServices;
namespace Adc_Display
{
    public partial class Form1 : Form
    {

        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);//系統dll導入ini寫函數
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);//系統dll導入ini讀函數
        string FileName = System.AppDomain.CurrentDomain.BaseDirectory + "data.ini";//ini文件名 獲取文件路徑
        StringBuilder temp = new StringBuilder(255);//存儲讀出ini內容變量
        string CurrentPortName;

        public Form1()
        {
            InitializeComponent();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(PortDataReceivedEvent); //串口數據接收事件
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; //禁用多線程調用,防止空間被其他線程使用
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(Form1_FormClosing);
        }
        //窗體關閉前發送的消息
        private void Form1_FormClosing(object sender,EventArgs e)
        {
            WritePrivateProfileString("PortData", "PortName", CurrentPortName, FileName);//窗口關閉,保存
            WritePrivateProfileString("TEST", "NAME1", comboBox1.Text, FileName);
        }
        //預加載時獲取開啓的串口號
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Size = new Size(620, 107);//縮小
            GetPrivateProfileString("PortData", "PortName", "COM1", temp, 256, FileName);//讀取ini值,默認是COM1
            comboBox1.Text = temp.ToString();//初始化
        }

        TrackBar[] GetTrackBar()
        {
            return new TrackBar[] { trackBar1, trackBar2, trackBar3, trackBar4, trackBar5,
                                       trackBar6, trackBar7, trackBar8, trackBar9, trackBar10,
            };//返回一個對象數組
        }

        private void PortDataReceivedEvent(object sender, SerialDataReceivedEventArgs args) //串口數據接收
        {
            TrackBar[] MytrackBar = GetTrackBar();
            byte[] Data = new byte[serialPort1.BytesToRead];
            serialPort1.Read(Data, 0, Data.Length);//讀
            foreach (byte MyData in Data)
            {
                for (int i = 1; i < 10; i++)
                {
                    MytrackBar[10 - i].Value = MytrackBar[10 - i - 1].Value;
                }
                trackBar1.Value = (int)MyData;
                string str = MyData.ToString("x");
                //textBox1.Text  = "0x" + (str.Length == 1 ? "0" + str : str);
            }
        }
        //開啓或關閉串口
        private void button1_Click(object sender, EventArgs e)
        {
            //關閉串口的操作
            if (serialPort1.IsOpen)//判斷
            {
                groupBox2.Visible = false; //第二個框框不可見
                this.Size = new Size(620, 107); //縮小
                serialPort1.Close();//此處可不加try,catch
                TrackBar[] MyProgeressBar = GetTrackBar();
                foreach (TrackBar theBar in MyProgeressBar)//遍歷,每個trackBar歸零
                {
                    theBar.Value = 0;
                }
                button1.Text = "打開串口";
            }
                //打開串口的操作
            else
            {
                try
                {
                    serialPort1.PortName = comboBox1.Text;//串口號
                    serialPort1.Open(); //打開
                    CurrentPortName = comboBox1.Text;
                    groupBox2.Visible = true; //第二個框框可見
                    this.Size = new Size(620, 436); //放大
                    button1.Text = "關閉串口";//按鍵標題
                }
                catch
                {
                    MessageBox.Show("串口打開錯誤", "錯誤");
                }
            }

        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章