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 に答える