|
.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」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




