.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
監視により作成/変更が通知されたファイルを開くには?
ファイルやディレクトリの作成/変更/削除を監視するには?
時間のかかる処理をバックグラウンドで実行するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH