我有2個類:C# - 如何對另一個類中引發的事件作出反應?
一個服務,它創建一個FileSystemWatcher,它在Word保存觀看文件時觸發一個事件。 而且有一個UserControl在啓動SaveEvent時需要執行一些功能。
我該如何對UserControl中的SaveEvent做出反應?
我有2個類:C# - 如何對另一個類中引發的事件作出反應?
一個服務,它創建一個FileSystemWatcher,它在Word保存觀看文件時觸發一個事件。 而且有一個UserControl在啓動SaveEvent時需要執行一些功能。
我該如何對UserControl中的SaveEvent做出反應?
我會在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
,程序的其餘部分都不會中斷。
爲該事件創建一個委託來處理它。
myClass.SaveEvent += DelegateMethod();
public void DelegateMethod(object sender, SaveEventArgs e)
{
//do stuff
//run your handler code
}
你能發表一些代碼嗎? –
請參閱[本](http://stackoverflow.com/q/12671458/1997232)。 – Sinatr
_如何對UserControl中的SaveEvent做出反應?_您的意思是服務的SaveEvent? –