.NET TIPS

Windowsアプリケーションでファイルやディレクトリを監視するには?

デジタルアドバンテージ 遠藤 孝信
2005/04/08

 「TIPS:ファイルやディレクトリの作成/変更/削除を監視するには?」では、ファイル・システムを監視するためのFileSystemWatcherクラス(System.IO名前空間)の基本的な利用方法について解説した。本稿ではVisual Studio .NET(以下、VS.NET)を使ってWindowsアプリケーションを作成する場合に、このクラスを利用する手順について解説する。

FileSystemWatcherコンポーネントの利用

 VS.NETでは、FileSystemWatcherクラスの機能はツールボックスの[コンポーネント]のタブにある「FileSystemWatcherコンポーネント」にまとめられている。このため、FileSystemWatcherクラスを使うには、このコンポーネントをフォーム上にドラッグ&ドロップするだけだ。

Windowsフォームに配置したFileSystemWatcherコンポーネント

 そしてFileSystemWatcherクラスのほとんどのプロパティ設定は[プロパティ]ウィンドウで行える。また、配置したコンポーネントをダブルクリックすれば、OnChangedイベントに対するイベント・ハンドラが自動的に作成される。OnChangedイベント以外のイベント・ハンドラについては、C#の場合には[プロパティ]ウィンドウで、VB.NETの場合にはVS.NETのコード・エディタ上から、マウス操作により作成可能だ。

 なお、FileSystemWatcherクラスの各プロパティやイベントについては、前掲の「TIPS:ファイルやディレクトリの作成/変更/削除を監視するには?」を参照していただきたい。

FileSystemWatcherクラスのSynchronizingObjectプロパティ

 WindowsアプリケーションでFileSystemWatcherクラスを利用する場合には、注意しなければならないポイントが1つある。それは、作成や変更が通知されて呼び出されるイベント・ハンドラのメソッド(以下、FileSystemWatcherイベント・ハンドラと記述)が、.NET Frameworkにより管理されているスレッド・プール内のスレッドにより実行されるという点だ。

 このスレッドは、Windowsフォーム上のボタンがクリックされるなどして呼び出される通常のイベント・ハンドラが実行されるスレッド(メイン・スレッド)とは別のスレッドである。このため、原則的にはFileSystemWatcherイベント・ハンドラ内でフォーム上のコントロールを操作すると不具合が発生する可能性がある(コントロールに対する操作は保証されない)。

 ただしFileSystemWatcherコンポーネントでは、FileSystemWatcherクラスのSynchronizingObjectプロパティにより、そのイベント処理をメイン・スレッド側で実行するための仕組みを持っている。

 FileSystemWatcherコンポーネントを配置した場合には、このSynchronizingObjectプロパティにフォーム名(デフォルトでは「Form1」)が指定されているはずだ。この場合には、FileSystemWatcherイベント・ハンドラはフォームから呼び出されることになる(より正確には、FormクラスのBeginInvokeメソッドが利用される。このBeginInvokeメソッドはどのスレッドからも安全に呼び出しが可能)。この結果、FileSystemWatcherイベント・ハンドラはメイン・スレッド上で実行されることになる。

FileSystemWatcherイベント・ハンドラが実行されるスレッド
SynchronizingObjectプロパティを利用するとFileSystemWatcherコンポーネントのイベント処理をメイン・スレッド上で実行させることができるため、イベント処理中にフォームのコントロールを操作しても問題は発生しない。

 なお、FileSystemWatcherイベント・ハンドラがメイン・スレッド上で実行されるということは、そのイベント・ハンドラで時間のかかる処理を行ってしまうとユーザー・インターフェイスの反応を悪くしてしまうということにつながる。WindowsアプリケーションでFileSystemWatcherコンポーネントを利用する場合には、この点にも注意が必要だ。End of Article

カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル
使用ライブラリ:FileSystemWatcherクラス(System.IO名前空間)
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
関連TIPS: ファイルやディレクトリの作成/変更/削除を監視するには?
 
この記事と関連性の高い別の.NET TIPS
ファイルやディレクトリの作成/変更/削除を監視するには?
監視により作成/変更が通知されたファイルを開くには?
Windowsフォームで別スレッドからコントロールを操作するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間