.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コンポーネントを利用する場合には、この点にも注意が必要だ。
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル 使用ライブラリ:FileSystemWatcherクラス(System.IO名前空間) 使用ライブラリ:Formクラス(System.Windows.Forms名前空間) 関連TIPS: ファイルやディレクトリの作成/変更/削除を監視するには? |
|
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|