Когда я использую типовые безопасные настройки приложения, в моем файле app.exe.config что-то вроде этого:
<setting name="IntervalTimeout" serializeAs="String">
<value>10</value>
</setting>
Settings.Designer.vb делает что-то вроде этого:
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("10")> _
Public ReadOnly Property IntervalTimeout() As Integer
Get
Return CType(Me("IntervalTimeout"),Integer)
End Get
End Property
И я могу получить доступ к настройке примерно так:
Settings.IntervalTimeout
Какова лучшая практика для мониторинга изменений этого параметра извне. То есть этот параметр используется приложением, работающим в качестве службы, и когда кто-то открывает соответствующий конфигурационный файл и изменяет IntervalTimeout, скажем, на 30, приложение-служба получает уведомление и делает все, что я ему скажу, чтобы перенастроить себя.
Обычно я бы использовал что-то подобное во время инициализации:
AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)
А затем реализовать обработчик событий, который проверяет имя измененного свойства и реагирует соответствующим образом.
Однако событие PropertyChanged вызывается только при вызове метода Set для свойства, а не когда кто-либо изменяет данные непосредственно в файле. Конечно, это был бы рай, но понятно, что это не так. ; -)
Скорее всего, я бы реализовал наблюдатель файловой системы для отслеживания изменений в файле, а затем перезагрузил бы конфигурацию, выяснил, что изменилось, и затем сделал бы все необходимое, чтобы отразить эти изменения.
Кто-нибудь знает лучший способ? Или даже поддерживаемый?