HOW TO:等候直到指定的檔案系統事件發生
更新:2007 年 11 月
除了使用 FileSystemWatcher 元件來立即監視特定目錄之外,您還可以使用 WaitForChanged 方法來等候特定事件發生,然後再繼續執行該執行緒。例如,如果您使用 Web 架構的 News 應用程式,您可能會在站台建立 Admin 部分來讓使用者上載他們的新聞報導。您可以使用 WaitForChanged 方法來監視這個目錄,直到上次存取日期變更才開始處理 News 目錄中的新文件。
您可以設定 WatcherChangeTypes 列舉型別的值來指定要監看的變更類型。可能值是 Created、Changed、Renamed、Deleted 或 All。若要監看目錄的任何變更,請將值設定為 All。如果您只要在一段時間之中等候事件發生,也可以指定逾時期間。
WaitForChanged 方法會傳回 WaitForChangedResult 型別的物件。這個類別包含發生在目錄中變更類型的特定資訊。您可以存取這個物件的 Name、OldName 及 TimedOut 資訊來找出更多有關變更的資訊。
WaitForChanged 是一種同步方法。如果您在 Windows 應用程式中使用它,而且是使用在 UI 執行緒而非背景工作執行緒,則應用程式會停止回應。如需 Visual Basic 中執行緒問題的詳細資訊,請參閱 Visual Basic 中的多執行緒。
若要等候變更
建立並設定您的 FileSystemWatcher 元件執行個體,來指出所要監看的目錄。如需詳細資訊,請參閱 HOW TO:建立 FileSystemWatcher 元件執行個體或 HOW TO:設定 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 方法的多載形式,將逾時期間指定為第二參數。
指定當您監視的變更發生時所要採取的動作。如需詳細資訊,請參閱 HOW TO:建立檔案系統事件的處理常式。
下列程式碼將說明如何告知使用者檔案需要刪除,然後等候引發 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.");
請參閱
工作
HOW TO:建立 FileSystemWatcher 元件執行個體
HOW TO:設定 FileSystemWatcher 元件執行個體