FileSystemWatcher.WaitForChanged がブロックされています(同期)。特にイベントを処理しているため、アイドル ループはまったく必要ありません。注 EnableRaisingEvents のデフォルトは true です。したがって、コンポーネントをフォームに追加するだけです。アイドルループはありません。コンポーネントがそれを処理するため、スレッド化はありません。
コンソール アプリケーションを使用しているとのことですが、したがって、次のループを作成できます。繰り返しますが、アイドル ループは必要ありません。コンポーネントはすべての詳細を処理します。
Do
Dim i As WaitForChangedResult = Me.FileSystemWatcher1.WaitForChanged(WatcherChangeTypes.All, 1000)
Loop Until fCancel
[更新] 「EnableRaisingEvents のデフォルトは true に注意してください。」Microsoft ソース コードによると、これは FileSystemWatcher コンポーネントがデザイナーにドロップされた場合にのみ当てはまります。以下に示すように:
/// <internalonly/>
/// <devdoc>
/// </devdoc>
[Browsable(false)]
public override ISite Site {
get {
return base.Site;
}
set {
base.Site = value;
// set EnableRaisingEvents to true at design time so the user
// doesn't have to manually. We can't do this in
// the constructor because in code it should
// default to false.
if (Site != null && Site.DesignMode)
EnableRaisingEvents = true;
}
}
[更新] 呼び出しWaitForChanged
は、ステートメントの直前と直後に EnableRaisingEvents を設定しますSystem.Threading.Monitor.Wait
。