FileSystemWatching wieder stoppen

Dr fRaNkNsTeIn

Grünschnabel
Ich habe einen Button. Wenn man einmal drauf klickt, soll ein FileSystemWatcher gestartet, und beim zweiten Klick auf diesen Button wieder geschlossen werden. Wie könnte ich sowas am besten realisieren?

Mein Lösungsansatz:

Beschreibung:
Ich habe einen Button, der eine Funktion aufruft, wenn er angeklickt wird. Des weiteren setzt er eine bool Variable(nennen wir sie mal active) auf true. Wenn man nochmal auf den Button clickt, dann setzt er die Varible(active) wieder auf false und ruft die Funktion erneut auf.
In dieser Funktion wird eine FileSystemWatching-Klasse aufgerufen und die Methode EnableRaisingEvents bekommt den wert von active zugewiesen.
Für active=true geht das ganze auch ganz gut, aber man kann die einmal gestartete Klasse nicht mehr beenden!

Quelltext: (Nur Auszüge von wichtigen Stellen)

PHP:
static bool watchingDirectory;
...
private void button1_Click(object sender, System.EventArgs e)
		{
			if(watchingDirectory==false)
			{
				watchingDirectory=true;
				watchDirectory();
				startLogging.Text="Abbrechen";
			}
			else
			{
				watchingDirectory=false;
				watchDirectory();
				startLogging.Text="Überwachung starten";
			}

		}
		public static void watchDirectory() 
		{
			//Hier wird das Verzeichnis überwacht:
				try 
				{
						
					FileSystemWatcher watcher =new FileSystemWatcher();
					watcher.Path=cfgXmlPath;	
//Welcher Ordner soll überwacht werden?
					watcher.Filter="*.xml";
					watcher.Created+=new FileSystemEventHandler(newFile);
					watcher.EnableRaisingEvents=watchingDirectory;
					
					
				}
				catch(Exception error)
				{
					MessageBox.Show("Es ist ein Fehler aufgetreten\n"+error);
				}
		}
		public static void newFile(object source,  FileSystemEventArgs e)
		{
			//Was geschieht, wenn eine neue Xml-Datei gefunden wird?
			MessageBox.Show(e.ToString());
		}


mfg
Frank
 

Saber

Erfahrenes Mitglied
Mit der Eigenschaft EnableRaisingEvents solltest Du in der Lage sein die Aktivitäten des FileSystemWatchers zu kontrollieren. Ist der Wert auf true so überwacht das Objekt ein Verzeichnis, auf false sollte es damit wieder aufhören.

Im übrigen würde ich die Erstellung des FileSystemWatchers aus der Methode watchDirectory rausnehmen und sie als Klassen-Member deklarieren.