2012-06-08 3 views
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 


       } 

     } 

    } 
+0

Разве сложно переместить настройки конфигурации в отдельный файл/другое хранилище? – walther

+0

im думает иметь текстовый файл отдельно для конфигурации, читать и писать url без проблем кеширования. –

ответ

2

ConfigurationManager.RefreshSection("appSettings"); Просто позвоните перед вызовом appConfig.AppSettings.Settings["myConfigData"].Value; который заставит приложение, чтобы прочитать новые & измененные настройки. В противном случае ConfigurationManager по умолчанию кэширует все значения.

+0

Я вызвал обновление до того, как я назвал appConfig.AppSettings.Settings ["myConfigData"]. –

Смежные вопросы