C#上位机配置信息加载功能

最开始的加载方式是用了一个全局类,里面存了各种的静态变量,在程序打开后会读取文件里的数据,存入全局静态变量里,需要的时候调用,修改配置的时候再重新写入文件。旧项目中是这样实现的,并且读取还是用了一个循环,存入了中间数组变量里。经常出现的问题呢,就是过程太过于繁琐,不仅修改的时候要时刻牢记整个流程,一个参数的增加各处都要修改,遗忘一处就要出bug,还有读取文件时候的参数计数也经常忘记修改会少读变量。总之这种方式又繁琐又容易出错。

  int ia = 0;
  string line;
  using (StreamReader sr = new StreamReader(Application.StartupPath + "\\系统配置\\" + "通讯配置.dat"))
  {
   for (ia = 1; ia <= 16; ia++)
   {
     line = sr.ReadLine();
        Library.Setting1[ia] = Convert.ToString(line);
    }
  }
  Configure1.Text = Convert.ToString(Library.Setting1[1]); //接口
  Configure2.Text = Convert.ToString(Library.Setting1[2]);//plcIP
  Configure3.Text = Convert.ToString(Library.Setting1[3]);//PlcPort
....

于是我开始使用了Ini文件来存储变量,虽然也是全局静态变量,但是至少在修改的时候不用去记住参数的总数再写入配置文件。另外我把所有的读取和写入的方法新建到一个配置信息管理的类里,里面存储着全局静态变量,还有下面这些方法。不过到此,在配置信息窗口来还需要在存入文件前把数据存入到全局变量里,读取时也是要赋值给全局静态变量。

ReadIni _ini = new ReadIni(Application.StartupPath + "//config.ini");
                _ini.WriteValue("MES", "URL", MesUrl);
                _ini.WriteValue("MES", "进站API", InputAPI);
                _ini.WriteValue("MES", "出站API", OutputAPI);
                _ini.WriteValue("MES", "设备状态API", DeviceAPI);
                _ini.WriteValue("MES", "设备编号", AssetNumber);
                _ini.WriteValue("MES", "产线编号", WorkCenterName);
                _ini.WriteValue("MES", "工序名称", SpecificationName);

                _ini.WriteValue("PLC", "IP", PLCIP);//PLC
                _ini.WriteValue("PLC", "PORT", PLCPort);//PLC

                _ini.WriteValue("Local", "netName", netDeviceName);//PLC

最后就有了使用属性的这一方法。依旧是使用ini文件来存储参数,但使用属性在进行赋值和文件存入操作,变量_url对其他类不可见,只能使用属性Url来间接获取其数据,在第一次获取数据的时候会去判断是否为空,如果为空就去读取文件,适合第一次加载参数,后续都只读取内存中的数值。在设置变量的值时同时也会存入文件并且赋值_url。另外为了防止多个线程去设置值的时候同时读取文件导致异常,添加文件锁避免同时写。

private static string _url;
        public static string Url
        {
            get => _url ?? (_url = Ini.ReadValue("MES", "上传接口")); //统一上传url

            set
            {
                lock (IniFileLock)
                {
                    _url = value;
                    Ini.WriteValue("MES", "上传接口", value);
                }

            }
        }
posted @ 2025-07-21 19:45  悲伤的攻城狮  阅读(19)  评论(0)    收藏  举报