Я использую ваш номер 2.
Но я работаю только в .NET 2 с моим приложением, но оно все равно должно применяться.
У меня есть класс настроек, который я использую в своих 2 программах. Внутри этого класса настроек я настраиваю объект FileSystemWatcher , который просматривает файл настроек.
Если файл настроек обновляется другим приложением, мой текущий получает триггер события, чтобы указать, что настройки необходимо перезагрузить.
Вы также можете применить тот же принцип на экране настроек, чтобы (если) другое приложение обновляло что-либо во время редактирования настроек, что отражается на вашем экране.
Я использую AppData (каталог с именем моей компании / приложения) для хранения файла.
Еще одна вещь, которую нужно иметь в виду, это то, что во время записи файла может быть блокировка, так что вы можете использовать временное имя для сохранения, удалить старый, переименовать временный метод или установить некоторую защитную блокировку файла чтение после того, как событие filewatcher сработало, были внесены изменения.
Я использую этот подход в моем FileSystemWatcher , прежде чем продолжить
IPSDependency.FileSystem.WaitForLockOnFile(Me.mFilePath)
код для этого так. (после прочтения этого сейчас, возможно, есть лучший способ, если я использую немного сна, чтобы уменьшить перегрузку процессора)
Public Shared Function IsLockAvailable(ByVal filename As String, ByVal fnfIsOK As Boolean) As Boolean
Dim fi As FileInfo
fi = New FileInfo(filename)
Return IsLockAvailable(New FileInfo(filename), fnfIsOK)
End Function
Public Shared Function IsLockAvailable(ByVal theFile As FileInfo, ByVal fnfIsOK As Boolean) As Boolean
Dim fs As FileStream
Try
If theFile.Exists Then
fs = New FileStream(theFile.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
fs.Close()
Return True
Else
Return fnfIsOK
End If
Catch ex As IOException
'we just let the exception go, because we are only testing the file rather than trying to use it.
Return False
End Try
End Function
Public Shared Sub WaitForLockOnFile(ByVal theFilename As String)
WaitForLockOnFile(New FileInfo(theFilename))
End Sub
Public Shared Sub WaitForLockOnFile(ByVal theFile As FileInfo)
Dim lockAvailable As Boolean
If theFile.Exists Then
While Not lockAvailable
lockAvailable = IsLockAvailable(theFile, False)
End While
End If
End Sub