При открытии файла вызывается следующий метод:
private void Load(string fileName)
{
// Only watch seq files.
this.watcher.Path = Path.GetDirectoryName(fileName);
// Watch for changes in LastAccess and LastWrite times, and
// the renaming of files or directories.
this.watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
this.watcher.Filter = Path.GetFileName(fileName);
// Begin watching.
this.watcher.EnableRaisingEvents = true;
// Add event handlers.
this.watcher.Changed += this.OnChanged;
// code for opening file asynchronously
}
private void OnChanged(object source, FileSystemEventArgs e)
{
App.Current.Dispatcher.Invoke(() =>
{
MessageBoxResult result = CustomMessageBox.ShowYesNoCancel(
"The file has been modified by another instance.",
"More instances are opened!",
"Overwrite",
"Reload",
"Save as",
MessageBoxImage.Exclamation);
if (result == MessageBoxResult.Yes)
{
// Overwrite
}
if (result == MessageBoxResult.Cancel)
{
// Save as;
}
if (result == MessageBoxResult.No)
{
// reload file and lose changes
}
});
var t = new System.Timers.Timer();
((FileSystemWatcher)source).Changed -= new FileSystemEventHandler(this.OnChanged);
t.Interval = 1000;
t.Elapsed += new ElapsedEventHandler(Elapsed);
t.Start();
}
private static void Elapsed(object sender, ElapsedEventArgs e)
{
((System.Timers.Timer)sender).Stop();
}
1. Я очень разочарован тем, что я получаю свой MessageBox только тогда, когда файл из одного экземпляра сохранен, но мне нравится, когда мойсообщение при загрузке файла на втором экземпляре.Основная проблема заключается в том, что пользователь открыл приложение дважды, и теперь его можно модифицировать в обоих случаях.Для сохранения я использую этот метод:
public override void WriteStartObject (модуль записи XmlDictionaryWriter, граф объектов);
Работает ли этот NotifyFilters.LastAccess?Для меня просто NotifyFilters.LastWrite, кажется, работает ...
Другая небольшая проблема заключается в том, что после того, как я сохранил изменения в своем файле в одном экземпляре, MessageBox появляется дважды (как будто у меня не хватает проблем).