#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!"); };