Откройте один и тот же файл в двух экземплярах .NET - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу использовать FSW для мониторинга, когда файл открывается и изменяется тем же экземпляром моего приложения.Я ожидаю запуска наблюдателя, только когда я сохраняю файл, который дважды открывается в одном приложении (нашем приложении).Моя проблема в том, что этот наблюдатель срабатывает, даже если у меня открыт только один экземпляр моего приложения.Как я могу сделать разницу между сохранением (изменением) одного файла из другого экземпляра приложения или сохранением того же файла из текущего экземпляра приложения?

Я пытаюсь использовать коллекцию, я пытаюсь сделать this.watcher.EnableRaisingEvents = true или this.watcher.EnableRaisingEvents = false в другой части программы, но, кажется, ничто не решает мою проблему.

Вот мой фрагмент кода:

private void Load(string fileName)
{
    // Only watch seq files.
    this.watcher.Path = Path.GetDirectoryName(fileName);

    // Watch for changes in LastWrite times.
    this.watcher.NotifyFilter = NotifyFilters.LastWrite;

    this.watcher.Filter = "*.zzz";

    // Add event handlers.
    this.watcher.Changed += this.OnChanged;

    // Begin watching.
    this.watcher.EnableRaisingEvents = true;

    // opened file
}

// Define the event handlers.

private void OnChanged(object source, FileSystemEventArgs e)
{
    App.Current.Dispatcher.Invoke(() =>
        {
            MessageBoxResult result = CustomMessageBox.ShowYesNoCancel(
                "The file has been modified by another instance.",
                "More app instances are opened!",
                "Overwrite",
                "Reload",
                "Save as",
                MessageBoxImage.Exclamation);

            if (result == MessageBoxResult.Yes)
            {
                // Overwrite
                this.SaveSequence();
            }

            if (result == MessageBoxResult.Cancel)
            {
                // Save as
            }

            if (result == MessageBoxResult.No)
            {
                // Reload file and lose changes
            }
        });

        // End watching.
        this.watcher.EnableRaisingEvents = false;
    }

internal bool Save()
{
    /// some code

    this.File.Write(this.FilePath); //here is the moment when my watcher is triggered

    /// rest of the code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...