Метод доступа из обработчика событий FileSystemWatcher в C#

#c#

#c#

Вопрос:

Я пытаюсь получить доступ к методу изнутри обработчика событий, используя FileSystemWatcher. Похоже, что были заданы варианты этого вопроса, но я уверен, что не могу использовать ни один из них для ответа на этот вопрос. В приведенном ниже коде я хочу иметь доступ к ReadNoteFile из OnChanged, но не могу. Любая помощь будет с благодарностью принята.

 public void CreateFileWatcher(string path)
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = path;

        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;

        watcher.Filter = "*.txt";

        watcher.Changed  = new FileSystemEventHandler(OnChanged);

        watcher.EnableRaisingEvents = true;
    }


public static void OnChanged(object source, FileSystemEventArgs e)
    {
        MessageBox.Show("New note has arrived!");

        //run ReadNoteFile here

    }

public void ReadNoteFile(string path)
    {
        //do some stuff
    }
 

Комментарии:

1. Вы не можете сделать ReadNoteFile статическим?

2. Не делайте OnChanged статическим

3. Хорошо, я чувствую себя довольно глупо, но да, создание статического файла ReadNoteFile, как и должно было быть, решает эту проблему. Спасибо.

Ответ №1:

FileSystemEventHandler Конструктор ожидает (object, IntPtr) аргументы.

Я предлагаю пропустить создание другого объекта и передать лямбда-выражение напрямую (как это обычно практикуется в настоящее время в этом сценарии):

 watcher.Changed  = delegate() { MessageBox.Show("New note has arrived!"); };
 

FileSystemWatcher#Изменен