记录一次winform弹出的form中修改配置,配置无法立即生效的情况

目前是有这样一个需求,要求修改配置文件,我使用的配置文件是ini类型的,通过点击设置按钮弹出一个设置的弹窗,设置弹窗初始化时会读取配置文件的配置,关闭时保存配置到配置文件中,在主窗体文件中会使用最新更新的配置。

刚开始使用的是dispose方式来保存配置:

SettingForm:

        protected override void Dispose(bool disposing)
        {    
            if (disposing)
            {
                SaveConfig();

                if (components != null)
                    components.Dispose();

                // 调用基类的 Dispose 方法
                base.Dispose(disposing);
            }
        }
        // 窗体初始化
        public void InitForm()
        {
            var parser = new IniParser(AppDomain.CurrentDomain.BaseDirectory + "printconfig.ini");
            this.cbxCheckLength.Checked = parser.GetSetting(configRootIni, "enableCheckLength").ToLower().Equals("true") ? true : false;
            this.txtBoxLength.IntValue = Convert.ToInt32(parser.GetSetting(configRootIni, "length", "0"));
            this.cbxCheckPrefix.Checked = parser.GetSetting(configRootIni, "enableCheckPrefix").ToLower().Equals("true") ? true : false;
            this.txtBoxPrefix.Text = parser.GetSetting(configRootIni, "prefix");
        }

        // 窗体保存
        public void SaveConfig()
        {
            var parser = new IniParser(AppDomain.CurrentDomain.BaseDirectory + "printconfig.ini");
            parser.AddSetting(configRootIni, "enableCheckLength", this.cbxCheckLength.Checked.ToString());
            parser.AddSetting(configRootIni, "enableCheckPrefix", this.cbxCheckPrefix.Checked.ToString());
            parser.AddSetting(configRootIni, "length", this.txtBoxLength.Text);
            parser.AddSetting(configRootIni, "prefix", this.txtBoxPrefix.Text);
            parser.SaveSettings();
        }

主窗体的设置按钮:

        private void 设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            showForm(new SettingForm("参数设置")); // 非模态方式加载窗体
            // 修改配置后,重新加载参数
            InitParams();
        }

类似这样,似乎在第一次修改时没有生效

查询资料发现:(来自KAMI)

使用 Show 的场景
多任务操作:当您希望用户可以在多个窗体之间自由切换时,使用 Show。
后台处理:当您需要在显示窗体后继续执行其他任务时,使用 Show。
使用 ShowDialog 的场景
用户输入:当您需要用户在继续操作之前完成某些输入或选择时,使用 ShowDialog。
确认操作:当您需要用户确认某些操作(如保存、删除等)时,使用 ShowDialog。

这里的show允许后台处理,类似两个线程同时运行,忽然就知道原因了

既然是同时运行,那么,在我打开窗体,showform之后,紧接着就执行了InitParams,因此,配置没有生效,但实际上,配置文件已经在settingform关闭时,修改完成了,只是读取的数据不对而已

解决方法也很简单,使用showDialogForm,让设置窗体显示为模态窗体即可

完美解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值