2016-11-09 46 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 
} 
相關問題