如何:等到指定的文件系统事件发生
更新:2007 年 11 月
除了使用 FileSystemWatcher 组件立即监视特定的目录之外,还可以使用 WaitForChanged 方法一直等到特定的事件发生,然后再继续执行线程。例如,如果正在使用一种基于 Web 的新闻应用程序,则可以在用户上载新闻报道的站点创建一个管理部分。可以使用 WaitForChanged 方法监视该目录,直到上次访问日期发生变化,然后开始处理新闻目录中的新文章。
通过设置 WatcherChangeTypes 枚举值指定要监视的更改类型。可能的值包括:Created、Changed、Renamed、Deleted 或 All。将值设置为 All 将监视对目录的所有更改。如果只想在一定的时间段内等待事件的发生,还可以指定一个超时期。
WaitForChanged 方法返回一个 WaitForChangedResult 类型的对象。该类包含有关目录中发生的更改类型的特定信息。可以访问有关该对象的名称、原名和超时期等信息,以获得有关更改的更多信息。
WaitForChanged 是一个同步方法。在 Windows 应用程序上使用时,如果该方法被用在 UI 线程而不是辅助线程上,应用程序将停止响应。有关 Visual Basic 中的线程处理问题的更多信息,请参见多线程处理 (Visual Basic)。
等待更改
创建并配置 FileSystemWatcher 组件实例以指示要监视的目录。有关更多信息,请参见 如何:创建 FileSystemWatcher 组件实例 或 如何:配置 FileSystemWatcher 组件实例。
在“代码编辑器”中创建 WaitForChangedResult 类的实例。
Dim result As System.IO.WaitForChangedResult
System.IO.WaitForChangedResult result;
在 FileSystemWatcher 组件实例上,将 WaitForChanged 属性的值设置为 WatcherChangeTypes 枚举值之一,以指定其等待的事件类型。
fileSystemWatcher1.WaitForChanged(System.IO.WatcherChangeTypes.All)
fileSystemWatcher1.WaitForChanged(System.IO.WatcherChangeTypes.All);
提示: 可以使用 WaitForChanged 方法的重载形式,指定超时时间作为第二个参数。
指定当监视的更改发生时希望采取的操作。有关更多信息,请参见 如何:创建文件系统事件的处理程序。
下面的代码演示如何通知用户某文件需要删除,然后等待引发 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.");