2011-07-14 15 views
3

ディレクトリを監視するFileSystemWatcherのインスタンスを作成する単純なC#4.0 Windowsフォームフォームがあります。ファイルが追加されると、適切なイベントが発生し、別のディレクトリにあるものを実行します。私は子供のフォームのインスタンスを作成します。子フォームがハングし、コントロールはペイントしません。FileSystemWatcherを使用するWindowsフォームで子フォームを起動しない

これは、私がメインフォームから起動しているように見えますが、FileSystemWatcherが別のスレッドにあるからです。 FileSystemWatcherイベントから子フォームを呼び出す適切な方法は、別のスレッドだと思いますか?

答えて

4

FileSystemWatcher.SynchronizingObjectプロパティをメインフォームに設定します。

MSDN

するSynchronizingObjectがnullの場合は、取り扱い方法を変更し、 、作成、削除、および改名イベントが システムスレッドプールからのスレッドで呼び出されています。システムスレッドプールの詳細については、 ThreadPoolを参照してください。

変更、作成、削除、および名前変更イベントが ビジュアルWindowsはプールが動作しない可能性があり、システムのスレッドを介して コンポーネントにアクセスし、ボタン等、構成要素を形成、または例外で を生じることによって処理されます。これを避けるには、 WindowsフォームコンポーネントにSynchronizingObjectを設定します。これにより、コンポーネントが作成された スレッドで 変更、作成、削除、および名前変更イベントが処理されるメソッドが呼び出されます。

関連する問題