Wenn ich typsichere Anwendungseinstellungen verwenden, ich so etwas in meiner app.exe.config Datei haben:Überwacht Änderungen an den Einstellungen in app.config
<setting name="IntervalTimeout" serializeAs="String">
<value>10</value>
</setting>
Die Settings.Designer.vb tut etwas wie folgt aus:
<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
Und ich kann die Einstellung mit so etwas wie diese zuzugreifen:
Settings.IntervalTimeout
Was ist die beste Methode, um Änderungen an dieser Einstellung von außen zu überwachen? I.e. Die Einstellung wird von einer Anwendung verwendet, die als Dienst ausgeführt wird, und wenn jemand die entsprechende Konfigurationsdatei öffnet und den IntervalTimeout auf 30 ändert, wird die Dienstanwendung benachrichtigt und tut alles, was ich ihr zur Neukonfiguration vorschlage.
Normalerweise würde ich so etwas wie dies bei der Initialisierung verwendet haben:
AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)
Und dann ein Eventhandler implementieren, die den Namen der Eigenschaft überprüft, die sich geändert hat und entsprechend reagiert.
Das PropertyChanged-Ereignis wird jedoch nur ausgelöst, wenn die Set-Methode für eine Eigenschaft aufgerufen wird, nicht wenn jemand die Daten direkt in der Datei ändert. Natürlich wäre das der Himmel gewesen, aber verständlich, dass das nicht so ist, wie es funktioniert. ;-)
Wahrscheinlich würde ich einen Dateisystemwächter implementieren, um Änderungen an der Datei zu überwachen und dann die Konfiguration neu zu laden, herauszufinden, was sich geändert hat, und dann alles Notwendige zu tun, um diese Änderungen wiederzugeben.
Kennt jemand einen besseren Weg? Oder sogar eine unterstützte?