0

我正在尝试在不关闭应用程序的情况下更新配置文件。问题是我仍在阅读缓存版本。我有一个不工作的 FileSystemWatcher。任何帮助表示赞赏

public partial class ChangeURL : Form
{

    Service ser = new Service();
    Configuration config =
        ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);



    public ChangeURL()
    {
        InitializeComponent();
        textBox1.Text = ser.Url;
        start();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        changeSettings();
        this.Close();
    }
    public void changeSettings()
    {

        KeyValueConfigurationCollection settings = config.appSettings.Settings;

        try
        {
            ConfigurationManager.RefreshSection("appSettings");
            settings["client_postCodeRef_Service"].Value = textBox1.Text;
            ser.Url = settings["client_postCodeRef_Service"].Value;
            config.Save(ConfigurationSaveMode.Modified);


        }
        catch (ConfigurationErrorsException e)
        {
            MessageBox.Show("[Exception error: {0}]",
                e.ToString());
        }



     } // end change settings
                public void onChange(object source, FileSystemEventArgs e) 
                { 
                    ConfigurationManager.RefreshSection("appSettings"); 
                }
                public void start()
                {
                    FileSystemWatcher fileWatcher = new FileSystemWatcher();

                    if (fileWatcher == null)
                    {
                        string path = Path.GetDirectoryName(config.FilePath);
                        string filename = Path.GetFileName(config.FilePath);

                        fileWatcher = new FileSystemWatcher();
                        fileWatcher.Path = path;
                        fileWatcher.Filter = filename;
                        fileWatcher.NotifyFilter = (NotifyFilters.CreationTime | NotifyFilters.FileName);
                        fileWatcher.Changed += onChange;
                        fileWatcher.EnableRaisingEvents = true;

                    } // endif


                }

        }

    }
4

1 回答 1

2

只需在调用ConfigurationManager.RefreshSection("appSettings");之前调用appConfig.AppSettings.Settings["myConfigData"].Value;,这将强制应用程序读取新的和更改的设置。否则,ConfigurationManager 会固有地缓存所有值。

于 2012-06-08T12:00:55.557 回答