我在C#Windows窗体应用程序中工作。我正在为我的申请使用2个表格。我有一个 app.config 文件来保存设置运行时间。
我在Form1中有一个按钮来打开Form2。我有一些设置要保存在Form2和Form1中。
我让我的应用运行了。在运行时,我通过Form1更新了app.config中的设置。之后,我单击按钮打开Form2并进行了一些修改,并尝试将设置保存到相同的app.config文件中。但它提出了一个例外
配置文件已被其他程序更改。
我无法弄明白我哪里出错了。请帮我把它搞定。 提前谢谢。
编辑1: 这是我在表单1中的功能
private void button2_Click(object sender, EventArgs e)
{
config1.AppSettings.Settings.Add("no_of_cameras", null);
config1.AppSettings.Settings["no_of_cameras"].Value = (no.Value).ToString("G");
config1.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Properties.Settings.Default.Reload();
}
这是我的表格2中的功能:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
config2.AppSettings.Settings.Add("mail_enable", null);
if (radioButton1.Checked == true)
{
label1.Show();
textBox1.Show();
config2.AppSettings.Settings["mail_enable"].Value = "true";
config2.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
else
{
config2.AppSettings.Settings["mail_enable"].Value = "false";
config2.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
textBox1.Hide();
label1.Hide();
}
Properties.Settings.Default.Reload();
}
答案 0 :(得分:3)
在Save()之后,您需要销毁配置对象并重新创建它以使多个保存操作正常工作。请参阅以下代码。
表格1代码:
private void button2_Click(object sender, EventArgs e)
{
using (Configuration config1 = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None))
{
config1.AppSettings.Settings.Add("no_of_cameras", null);
config1.AppSettings.Settings["no_of_cameras"].Value = (no.Value).ToString("G");
config1.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Properties.Settings.Default.Reload();
}
}
Form2代码:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
using (Configuration config2 = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None))
{
config2.AppSettings.Settings.Add("mail_enable", null);
if (radioButton1.Checked == true)
{
label1.Show();
textBox1.Show();
config2.AppSettings.Settings["mail_enable"].Value = "true";
config2.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
else
{
config2.AppSettings.Settings["mail_enable"].Value = "false";
config2.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
textBox1.Hide();
label1.Hide();
}
Properties.Settings.Default.Reload();
}
}
答案 1 :(得分:0)
Form 2无法覆盖app.config,因为它仍被Form 1使用(反之亦然)。因此,保存后需要使Configuration变量无效。
using语句不起作用,因为配置不是IDisposable。
表格1:
private void button2_Click(object sender, EventArgs e)
{
Configuration config1 = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None)
config1.AppSettings.Settings.Add("no_of_cameras", null);
config1.AppSettings.Settings["no_of_cameras"].Value = (no.Value).ToString("G");
config1.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Properties.Settings.Default.Reload();
config1 = null;
}
表格2:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
Configuration config2 = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None)
config2.AppSettings.Settings.Add("mail_enable", null);
if (radioButton1.Checked == true)
{
label1.Show();
textBox1.Show();
config2.AppSettings.Settings["mail_enable"].Value = "true";
config2.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
else
{
config2.AppSettings.Settings["mail_enable"].Value = "false";
config2.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
textBox1.Hide();
label1.Hide();
}
Properties.Settings.Default.Reload();
config2 = null;
}