2016-11-09 3 views
0

Ich habe 2 Klassen:C# - Wie reagiert man auf ein Ereignis, das in einer anderen Klasse ausgelöst wurde?

Ein Dienst, der einen FileSystemWatcher erstellt, der ein Ereignis auslöst, wenn die überwachte Datei von Word gespeichert wird. Und ein UserControl, das einige Funktionen hat, die ich ausführen muss, wenn das SaveEvent ausgelöst wird.

Wie kann ich auf das SaveEvent im UserControl reagieren?

+2

könnten Sie einen Code schreiben? –

+0

Siehe [dies] (http://stackoverflow.com/q/12671458/1997232). – Sinatr

+0

_Wie kann ich auf das SaveEvent im UserControl reagieren _ Sie meinen das SaveEvent des Service? –

Antwort

0

Ich würde ein Ereignis im Service erstellen, das ausgelöst wird, wenn der FileSystemWatcher ausgelöst wird. Der Dienst sollte den FileSystemWatcher umbrechen. Das übergeordnete Objekt beider Objekte ruft eine Methode für das Benutzersteuerelement auf.

Zum Beispiel: (Pseudo-)


class MyProgram 
{ 
    Service svc; 
    UserControl ctrl; 

    public MyProgram() 
    { 
     // create the control 
     ctrl = new UserControl(); 

     // create the service 
     svc = new Service(); 
     svc.SaveEvent += FileChanges; 

     /////// you might construct something like: _(do not use both)_ 
     svc.SaveEvent += (s, e) => ctrl.FileIsSaved(e.Filename); 
    } 

    private void FileChanges(object sender, ServiceFileChangedEventArgs e) 
    { 
     ctrl.FileIsSaved(e.Filename); 
    } 
} 

class Service 
{ 
    // FileSystemWatcher 
    private FileSystemWatcher _watcher; 

    public Service() // constructor 
    { 
     // construct it. 
     _watcher = new FileSystemWatcher(); 
     _watcher.Changed += Watcher_Changed; 
    } 

    // when the file system watcher raises an event, you could pass it thru or construct a new one, whatever you need to pass to the parent object 
    private void Watcher_Changed(object source, FileSystemEventArgs e) 
    { 
     SaveEvent?.Invoke(this, new ServiceFileChangedEventArgs(e.FullPath)); // whatever 
    } 

    public event EventHandler<SaveEventEventArgs> SaveEvent; 
} 

class SaveEventEventArgs : EventArgs 
{ 
    // filename etc.... 
} 

Dies ist nur einige Pseudo-Beispielcode. Aber die wichtige Sache ist, Ihr Program/Usercontrol sollte NICHT von der FileSystemWatcher abhängen. Ihr Service sollte es umhüllen. Also, wann immer Sie sich entscheiden, die FileSystemWatcher in (zum Beispiel) DropBoxWatcher zu ändern, ist der Rest des Programms nicht gebrochen.

-1

Erstellen Sie einen Delegaten für dieses Ereignis, um damit umzugehen.

myClass.SaveEvent += DelegateMethod(); 

public void DelegateMethod(object sender, SaveEventArgs e) 
{ 
    //do stuff 
    //run your handler code 
} 
Verwandte Themen