FileSystemWatcher - только событие изменения, один раз выстрелив, один раз? - PullRequest
1 голос
/ 21 августа 2009

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

Кто-нибудь может увидеть, что происходит?

private FileSystemWatcher StartWatchingFile()
{
    fw = new FileSystemWatcher();
    fw.Path = this.directoryLocation;
    fw.Filter = this.Filename;

    fw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;

    // Add event handler
    fw.Changed += new FileSystemEventHandler(fw_Changed);

    // Open file        
System.Diagnostics.Process.Start(this.CreateAbsoluteFilePath(this.Filename));

    // Begin watching.
    fw.EnableRaisingEvents = true;

    return fw;
}

//************************  

    void fw_Changed(object sender, FileSystemEventArgs e)
    {
        MessageBox.Show("File: " + e.FullPath + " " + e.ChangeType);
    }

РЕДАКТИРОВАТЬ: StartWatchingFile () теперь возвращает средство просмотра файлов, которое хранится в классе, который не будет собирать мусор, просто чтобы убедиться, что я держу весь класс так, как считал, что функция fw_changed () не сможет называется. Таким образом, весь класс теперь не собирает мусор. Класс содержится в ArrayList, который является публичным членом класса

С уважением,

Jon

Ответы [ 2 ]

1 голос
/ 22 августа 2009

Извините, я не могу ответить на ваш вопрос конкретно. В общем, я внесу свой вклад в то, что, если вы используете его достаточно, вы узнаете, что FileSystemWatcher не является надежным. Microsoft Connect показывает несколько проблем с ним. Я согласен с мнением Джейсона Джексона о FileSystemWatcher .

1 голос
/ 22 августа 2009

Можно ли воспроизвести, что всегда работает впервые?

Если нет, то FileSystemWatcher мог быть собран сборщиком мусора в то же время после завершения StartWatchingFile, поскольку он объявлен локально.

Если это так, возможно, процесс, который вы запускаете, блокирует файл, так что файл фактически не изменяется?

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