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...


Anmelden zum Antworten