方法 : 指定されたファイル システム イベントが発生するまで待機する

更新 : 2007 年 11 月

FileSystemWatcher コンポーネントを使用して特定のディレクトリをすぐに監視する他に、WaitForChanged メソッドを使用して、特定のイベントが発生するまで待ってからスレッドの実行を続けることもできます。たとえば、Web ベースのニュース アプリケーションで、ユーザーがニュース記事をアップロードするサイトの管理部分を作成するとします。その場合、WaitForChanged メソッドを使用して、最終アクセス日が変更になるまでディレクトリを監視し、その後で新しい記事に対するニュース ディレクトリの処理を開始するようにできます。

WatcherChangeTypes 列挙値の値を設定して、監視する変更の種類を指定します。指定できる値は、CreatedChangedRenamedDeleted、または All です。値を All に設定すると、ディレクトリへのすべての変更が監視されます。また、単にイベントが発生するまで特定の時間だけ待つ場合は、タイムアウト時間も指定できます。

WaitForChanged メソッドは、WaitForChangedResult 型のオブジェクトを返します。このクラスには、ディレクトリで発生した変更の種類に関する固有の情報が含まれています。このオブジェクトの Name、OldName、TimedOut などにアクセスして、変更についての詳細を確認できます。

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 コンポーネントのインスタンスにおいては、WatcherChangeTypes 列挙値のいずれかの値に WaitForChanged プロパティの値を設定すると、待つイベントの種類を指定できます。

    fileSystemWatcher1.WaitForChanged(System.IO.WatcherChangeTypes.All)
    
         fileSystemWatcher1.WaitForChanged(System.IO.WatcherChangeTypes.All);
    
    0ekfkkw6.alert_note(ja-jp,VS.90).gifヒント :

    オーバーロードされた形式の WaitForChanged メソッドを使用して、2 番目のパラメータにタイムアウト時間を指定できます。

  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 コンポーネントのインスタンスを設定する

方法 : ファイル システム イベントに対するハンドラを作成する

概念

ファイル システム イベントの監視の概要