将参数传递给事件处理程序

我想使用我的事件将我的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) { //... }