2017-07-12 3 views
0

Arbeiten an einer Anwendung, die einige Dateien überwachen und bei Dateiänderung, zeigen Sie, dass für jede Datei im neuen Fenster ändern.Programmatisch neue Fenster öffnen und regelmäßig aktualisieren

Sobald der Benutzer die zu überwachende Datei auswählt, sollte beim Klicken auf die Schaltfläche ein neues Fenster geöffnet werden. Im Hintergrund trigger ich FileSystemWatcher, um diese Datei auf Änderungen zu beobachten. Sobald die Änderung passiert, muss ich dieses neu geöffnete Fenster (mit Textfeld) mit einigen Informationen aktualisieren.

Ich habe bereits neues Window1 (Projekt -> Fenster hinzufügen -> Fenster (WPF)) eingerichtet. Der Rest des Codes sieht wie folgt aus:

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = current_log.FullName.Substring(0, current_log.FullName.LastIndexOf('\\')); 

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
      | NotifyFilters.FileName | NotifyFilters.DirectoryName; 

watcher.Filter = current_log.Name; 
watcher.Changed += new FileSystemEventHandler(OnChanged); 
watcher.EnableRaisingEvents = true; 

//check if window is already active 
//???? 

//open new window 
Window1 log_window = new Window1(); 
log_window.Show(); 
log_window.txt_log_window_messages.AppendText("ddd\n"); 

Fragen:

  • Wie überprüfen, ob diese Datei bereits ein Monitorfenster aktiv ist, um es nicht wieder zu öffnen?
  • Wie zu identifizieren, in welchem ​​Fenster ich Textbox in OnChanged() Funktion aktualisieren sollte?
+1

Sie könnten ein Wörterbuch – BugFinder

+1

Verwenden Hashtable \ Wörterbuch mit Filename als Schlüssel, und Window-Instanz als Wert haben. – AnjumSKhan

+0

Ich liebe einfache Lösungen, danke euch beiden! – SubjectX

Antwort

0

Ich würde empfehlen, hier mit einer Dictionary zu arbeiten. Etwas wie folgt aus:

ictionary<string, Window1> files = new Dictionary<string, Window1>(); 

private void init() 
{ 
    FileSystemWatcher watcher = new FileSystemWatcher(); 
    watcher.Path = current_log.FullName.Substring(0, current_log.FullName.LastIndexOf('\\')); 

    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
     | NotifyFilters.FileName | NotifyFilters.DirectoryName; 

    watcher.Filter = current_log.Name; 
    watcher.Changed += Watcher_Changed; 
    watcher.EnableRaisingEvents = true; 
} 

private void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
    if(!files.ContainsKey(e.Name)) 
    { 
     //open new window 
     Window1 log_window_new = new Window1();    

     files.Add(e.Name, log_window_new); 
     log_window_new.Show(); 
     log_window_new.txt_log_window_messages.AppendText("ddd\n"); 
    } 

    // Update existing window 
    Window1 log_window= files[e.Name]; 
    log_window.txt_log_window_messages.AppendText("tttt\n"); 
} 
Verwandte Themen