2016-11-09 45 views
0

我有2个类:C# - 如何对另一个类中引发的事件作出反应?

一个服务,它创建一个FileSystemWatcher,它在Word保存观看文件时触发一个事件。 而且有一个UserControl在启动SaveEvent时需要执行一些功能。

我该如何对UserControl中的SaveEvent做出反应?

+2

你能发表一些代码吗? –

+0

请参阅[本](http://stackoverflow.com/q/12671458/1997232)。 – Sinatr

+0

_如何对UserControl中的SaveEvent做出反应?_您的意思是服务的SaveEvent? –

回答

0

我会在FileSystemWatcher引发时引发的服务中创建一个事件。 服务应包装FileSystemWatcher。两个对象的父对象将调用UserControl上的一个方法。

例如:(伪)


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

这仅仅是一些伪代码示例。但重要的是,您的Program/Usercontrol应该不是取决于FileSystemWatcher。您的Service应该包装它。因此,无论何时您决定将FileSystemWatcher更改为(例如)DropBoxWatcher,程序的其余部分都不会中断。

-1

为该事件创建一个委托来处理它。

myClass.SaveEvent += DelegateMethod(); 

public void DelegateMethod(object sender, SaveEventArgs e) 
{ 
    //do stuff 
    //run your handler code 
} 
相关问题