将参数传递给事件处理程序
我想使用我的事件将我的List
作为参数传递
public event EventHandler _newFileEventHandler; List _filesList = new List(); public void startListener(string directoryPath) { FileSystemWatcher watcher = new FileSystemWatcher(directoryPath); _filesList = new List(); _timer = new System.Timers.Timer(5000); watcher.Filter = "*.pcap"; watcher.Created += watcher_Created; watcher.EnableRaisingEvents = true; watcher.IncludeSubdirectories = true; } void watcher_Created(object sender, FileSystemEventArgs e) { _timer.Elapsed += new ElapsedEventHandler(myEvent); _timer.Enabled = true; _filesList.Add(e.FullPath); _fileToAdd = e.FullPath; } private void myEvent(object sender, ElapsedEventArgs e) { _newFileEventHandler(_filesList, EventArgs.Empty);; }
从我的主要表格,我想得到这个清单:
void listener_newFileEventHandler(object sender, EventArgs e) { }
创建一个新的EventArgs类,例如:
public class ListEventArgs : EventArgs { public List Data { get; set; } public ListEventArgs(List data) { Data = data; } }
并使你的活动如下:
public event EventHandler NewFileAdded;
添加点火方法:
protected void OnNewFileAdded(List data) { var localCopy = NewFileAdded; if (localCopy != null) { localCopy(this, new ListEventArgs(data)); } }
当你想要处理这个事件时:
myObj.NewFileAdded += new EventHandler(myObj_NewFileAdded);
处理程序方法如下所示:
public void myObj_NewFileAdded(object sender, ListEventArgs e) { // Do what you want with e.Data (It is a List of string) }
您可以将事件的签名定义为您想要的任何内容。 如果事件需要提供的唯一信息是该列表,那么只需传递该列表:
public event Action> MyEvent; private void Foo() { MyEvent(new List(){"a", "b", "c"}); }
然后在订阅活动时:
public void MyEventHandler(List list) { //... }