如何:等到指定的文件系统事件发生

更新:2007 年 11 月

除了使用 FileSystemWatcher 组件立即监视特定的目录之外,还可以使用 WaitForChanged 方法一直等到特定的事件发生,然后再继续执行线程。例如,如果正在使用一种基于 Web 的新闻应用程序,则可以在用户上载新闻报道的站点创建一个管理部分。可以使用 WaitForChanged 方法监视该目录,直到上次访问日期发生变化,然后开始处理新闻目录中的新文章。

通过设置 WatcherChangeTypes 枚举值指定要监视的更改类型。可能的值包括:CreatedChangedRenamedDeletedAll。将值设置为 All 将监视对目录的所有更改。如果只想在一定的时间段内等待事件的发生,还可以指定一个超时期。

WaitForChanged 方法返回一个 WaitForChangedResult 类型的对象。该类包含有关目录中发生的更改类型的特定信息。可以访问有关该对象的名称、原名和超时期等信息,以获得有关更改的更多信息。

WaitForChanged 是一个同步方法。在 Windows 应用程序上使用时,如果该方法被用在 UI 线程而不是辅助线程上,应用程序将停止响应。有关 Visual Basic 中的线程处理问题的更多信息,请参见多线程处理 (Visual Basic)

等待更改

  1. 创建并配置 FileSystemWatcher 组件实例以指示要监视的目录。有关更多信息,请参见 如何:创建 FileSystemWatcher 组件实例如何:配置 FileSystemWatcher 组件实例

  2. 在“代码编辑器”中创建 WaitForChangedResult 类的实例。

    Dim result As System.IO.WaitForChangedResult
    
     System.IO.WaitForChangedResult result;
    
  3. FileSystemWatcher 组件实例上,将 WaitForChanged 属性的值设置为 WatcherChangeTypes 枚举值之一,以指定其等待的事件类型。

    fileSystemWatcher1.WaitForChanged(System.IO.WatcherChangeTypes.All)
    
         fileSystemWatcher1.WaitForChanged(System.IO.WatcherChangeTypes.All);
    
    提示:

    可以使用 WaitForChanged 方法的重载形式,指定超时时间作为第二个参数。

  4. 指定当监视的更改发生时希望采取的操作。有关更多信息,请参见 如何:创建文件系统事件的处理程序

    下面的代码演示如何通知用户某文件需要删除,然后等待引发 Deleted 事件。此代码监视用户的个人文件夹。

    Console.WriteLine("Please delete OldNote.txt.")
    Dim directory As String
    directory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
    Dim watcher As New System.IO.FileSystemWatcher(directory, "OldNote.txt")
    result = watcher.WaitForChanged(System.IO.WatcherChangeTypes.Deleted)
    Console.WriteLine("Thanks for deleting OldNote.txt.")
    
         Console.WriteLine("Please delete OldNote.txt.");
            string directory =
               Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            System.IO.FileSystemWatcher watcher =
               new System.IO.FileSystemWatcher(directory, "OldNote.txt");
            result = watcher.WaitForChanged(System.IO.WatcherChangeTypes.Deleted);
            Console.WriteLine("Thanks for deleting OldNote.txt.");
    

请参见

任务

如何:创建 FileSystemWatcher 组件实例

如何:配置 FileSystemWatcher 组件实例

如何:创建文件系统事件的处理程序

概念

关于监视文件系统事件的介绍