我有以下用于监视文本文件目录的代码,该目录每天两次获取新文件,该代码在一段时间内可以正常工作,但是此后它将停止触发OnCreated事件...

[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public static void Run()
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @"c:\users\documents\";

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

    watcher.Filter = "*.txt";

    // Add event handlers.
    watcher.Created += new FileSystemEventHandler(OnCreated);

    // Begin watching.
    watcher.EnableRaisingEvents = true;

    // Wait for the user to quit the program.
    Console.WriteLine("Press \'q\' to quit the sample.");
    while(Console.Read()!='q');
}

private static void OnCreated(object source, FileSystemEventArgs e)
{
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}


无法解决问题。

另外,我想知道一种万无一失的替代方案(如果有的话),因为我找不到这种可靠的方案。

最佳答案

因为Run方法完成后,watcher才有资格进行垃圾回收。
这意味着watcher一段时间后将被收集,并且显然将停止引发事件。

要解决,请在外部范围内保留观察者的参考:

private static FileSystemWatcher watcher;

public static void Run()
{
    watcher = new FileSystemWatcher();
    ...
}

关于c# - 一段时间后FileSystemWatcher不会启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20956844/

10-09 21:30