FileSystemWatcher stoppen
-
Hallo,
mit folgender Funktion starte ich die Überwachung eines Verzeichnisses via FileSystemWatcher:
int static run(String^ str_path) { // Create a new FileSystemWatcher and set its properties. FileSystemWatcher^ watcher = gcnew FileSystemWatcher; watcher->Path = str_path; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher->NotifyFilter = static_cast<NotifyFilters>(NotifyFilters::LastAccess | NotifyFilters::LastWrite | NotifyFilters::FileName | NotifyFilters::DirectoryName); // Add event handler watcher->Created += gcnew FileSystemEventHandler( Watcher::OnChanged ); watcher->IncludeSubdirectories = true; // Begin watching. watcher->EnableRaisingEvents = true; return 1; }
Diese befindet sich in einer von mir dafür erstellten Klasse.
Aufrufen tue ich die Funktion über einen Button von der Main-Form:private: System::Void bt_start_Click(System::Object^ sender, System::EventArgs^ e) { if(!Directory::Exists(tb_path->Text) ) { MessageBox::Show( "Ungültiger Pfad!", "Fehler", MessageBoxButtons::OK, MessageBoxIcon::Error ); } else { Watcher^ w = gcnew Watcher(); w->run(tb_path->Text); if(tb_path->Text!="") { label1->Text="Überwachung läuft."; } } }
Nun möchte ich den Watcher wieder mit
watcher->EnableRaisingEvents = false;
stoppen, doch das gelingt mir nicht, da ich keinen Zugriff darauf bekomme? Wie kann ich den Watcher nur einmal erstellen? Und wie kann ich eine Stop-Funktion schreiben, die den laufenden Watcher wieder anhält?
Vielen Dank schonmal!
-
Mache dein Watcher (oder gleich den FileSystemWatcher) als Member deiner Form1 Klasse.
-
Ja die Idee hatt ich auch schon aber bin dran gescheitert. Wie muss ich das machen? und an welcher Stelle? Sorry für die Anfängerfrage aber hab ewig nix mehr mit C++ gemacht...
-
Martin86 schrieb:
Sorry für die Anfängerfrage aber hab ewig nix mehr mit C++ gemacht...
Ja, und das machst Du auch jetzt nicht - sondern C++/CLI, das ist eine .NET Sprache.
Tip:
ref class Form1 : public Form { public: Form1() { Initialize...(); watcher = gcnew FileSystemWatcher(); watcher-> ... weitere Einstellungen ... watcher->Created += gcnew FileSystemEventHandler(this, Form1::OnChanged); } private: void OnChanged(...) { } private: FileSystemWatcher^ watcher; };
-
Danke! Hat funktioniert. Muss mich erst an die Syntax gewöhnen...
-
Gelegenheitscoder schrieb:
Danke! Hat funktioniert. Muss mich erst an die Syntax gewöhnen...
Besser abgewöhnen und dafür C# angewöhnen...