/// <summary>
        ///     构造方法
        /// </summary>
        /// <param name="config">配置值</param>
        internal SerialPortX(Dictionary <String, String> config)
        {
            // System.IO.Ports.SerialPort定义参数
            // 串口名
            serialPort.PortName = this.portName = DictionaryUtils.GetString(config, "PortName");
            // 波特率
            serialPort.BaudRate = Convert.ToInt32(DictionaryUtils.GetString(config, "BaudRate"));
            // 数据位
            serialPort.DataBits = Convert.ToInt32(DictionaryUtils.GetString(config, "DataBits"));
            // 校验规则
            String parity = DictionaryUtils.GetString(config, "Parity");

            foreach (Parity PARITY in Enum.GetValues(typeof(Parity)))
            {
                if (Enum.GetName(typeof(Parity), PARITY).Equals(parity))
                {
                    serialPort.Parity = PARITY;
                }
            }
            // 停止位
            String stopBits = DictionaryUtils.GetString(config, "StopBits");

            foreach (StopBits STOP_BITS in Enum.GetValues(typeof(StopBits)))
            {
                if (Enum.GetName(typeof(StopBits), STOP_BITS).Equals(stopBits))
                {
                    serialPort.StopBits = STOP_BITS;
                }
            }

            // LichKin.IO.Ports.SerialPortX定义参数
            // 设备ID
            this.sid = DictionaryUtils.GetString(config, "sid");
            // 是否使用指令队列
            this.useCMDQueue = "true".Equals(DictionaryUtils.GetString(config, "useCMDQueue"));
            // 验证打开状态间隔时间(毫秒)
            this.checkOpenStatusPeriod = Convert.ToInt32(DictionaryUtils.GetString(config, "checkOpenStatusPeriod"));
            // 打开后操作间隔时间(毫秒)
            this.afterOpenEventHandlerPeriod = Convert.ToInt32(DictionaryUtils.GetString(config, "afterOpenEventHandlerPeriod"));
            // 发送指令超时时长(毫秒)
            this.sendCMDTimeout = Convert.ToInt32(DictionaryUtils.GetString(config, "sendCMDTimeout"));
            // 接收数据超时时长(毫秒)
            this.reciveDataTimeout = Convert.ToInt32(DictionaryUtils.GetString(config, "reciveDataTimeout"));
        }
 /// <summary>
 ///     使用配置文件初始化
 /// </summary>
 private void initByConfigs()
 {
     try
     {
         Dictionary <String, String> config = JSONFileReader.Read(CONFIG_FILE_NAME);
         this.Text      = RSAUtils.Decrypt(RSAUtils.PEM2XML(true, PRIMARY_KEY), DictionaryUtils.GetString(config, "Title", "LichKin"));
         webBrowser.Url = new Uri(RSAUtils.Decrypt(RSAUtils.PEM2XML(true, PRIMARY_KEY), DictionaryUtils.GetString(config, "Url", "http://www.lichkin.com/")));
         this.Icon      = System.Drawing.Icon.ExtractAssociatedIcon(ICON_FILE_NAME);
     }
     catch
     {
         MessageBox.Show("配置信息被篡改或已丢失,请联系管理员。", "程序即将退出");
         Application.Exit();
     }
 }