FileSystemWatcher.WaitForChanged ist blockierend (synchron). Es besteht absolut kein Bedarf an einer Leerlaufschleife, insbesondere weil Sie Ereignisse behandeln. Beachten Sie, dass EnableRaisingEvents standardmäßig auf true gesetzt ist. Daher müssen Sie nur das Komponente einem Formular hinzufügen. Es gibt keine Leerlaufschleife. Es gibt kein Threaden, weil sich die Komponente darum kümmert.
Ich verstehe, dass Sie eine Konsolenanwendung verwenden. Daher können Sie die folgende Schleife erstellen. Auch hier ist keine Leerlaufschleife erforderlich. Die Komponente kümmert sich um alle Details.
Do
Dim i As WaitForChangedResult = Me.FileSystemWatcher1.WaitForChanged(WatcherChangeTypes.All, 1000)
Loop Until fCancel
[update] "Beachten Sie, dass EnableRaisingEvents standardmäßig auf true gesetzt ist." Laut dem Microsoft-Quellcode ist dies nur dann der Fall, wenn die FileSystemWatcher-Komponente auf ein Designerfeld gezogen wird. Wie unten gezeigt:
///
///
///
[Browsable(false)]
public override ISite Site {
get {
return base.Site;
}
set {
base.Site = value;
// Setzen Sie EnableRaisingEvents auf true zur Designzeit, damit der Benutzer
// dies nicht manuell tun muss. Wir können dies nicht im Konstruktor machen, weil es im Code
// standardmäßig auf false stehen sollte.
if (Site != null && Site.DesignMode)
EnableRaisingEvents = true;
}
}
[update] Der Aufruf von WaitForChanged
setzt EnableRaisingEvents unmittelbar vor und nach den System.Threading.Monitor.Wait
Anweisungen.