Хорошо, поэтому я узнал от Как проверить, обновлен ли открытый файл , что я должен использовать FileSystemWatcher , чтобы отслеживать изменения в файлах. Тогда теперь возникает вопрос: нужно ли мне отслеживать много файлов, я должен создать 1 наблюдатель для каждого файла? Кроме того, я должен как-то избавиться от наблюдателя, как только файл будет закрыт. Имеет ли Dictionary<string, FileSystemWatcher>
способ хранения пути к файлу и FileSystemWatcher
путь? Открывая больше файлов, я добавляю больше наблюдателей и, закрывая, распоряжаюсь наблюдателями соответствующим образом. Будет ли плохо иметь слишком много наблюдателей?
UPDATE
Я только что сделал
protected void AttachFileMonitor(EditorTabViewModel tab)
{
string file = tab.FilePath;
if (!_fsWatchers.ContainsKey(file))
{
var watcher = new FileSystemWatcher();
watcher.Path = Path.GetDirectoryName(file);
watcher.Filter = Path.GetFileName(file);
watcher.Changed += (s, e) =>
{
string message = "";
string caption = "";
MessageBoxButton buttons = MessageBoxButton.YesNo;
MessageBoxImage image = MessageBoxImage.Question;
MessageBoxResult defaultResult = MessageBoxResult.Yes;
MessageBoxResult result = _dialogSvc.GetMessageBox(message, caption, buttons, image, defaultResult);
if (result == MessageBoxResult.Yes)
{
tab.Open(file);
}
};
_fsWatchers.Add(file, watcher);
}
}
protected void DetachFileMonitor(EditorTabViewModel tab)
{
if (_fsWatchers.ContainsKey(tab.FilePath)) {
_fsWatchers.Remove(tab.FilePath);
}
}
Я обнаружил, что Changed()
никогда не срабатывает ...