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.
könnten Sie einen Code schreiben? –
Siehe [dies] (http://stackoverflow.com/q/12671458/1997232). – Sinatr
_Wie kann ich auf das SaveEvent im UserControl reagieren _ Sie meinen das SaveEvent des Service? –