Passing parameter to an event handler [stackoverflow],
Q:
I want to pass myList<string>
As parameter using my event
public event EventHandler _newFileEventHandler; List<string> _filesList = new List<string>();public void startListener(string directoryPath){ FileSystemWatcher watcher = new FileSystemWatcher(directoryPath); _filesList = new List<string>(); _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);;}
And from my main form I want to get this List:
void listener_newFileEventHandler(object sender, EventArgs e){}
A:
Make a new EventArgs class such:
public class ListEventArgs : EventArgs { public List<string> Data { get; set; } public ListEventArgs(List<string> data) { Data = data; } }
And make your event as this:
public event EventHandler<ListEventArgs> NewFileAdded;
Add a firing method:
protected void OnNewFileAdded(List<string> data){ var localCopy = NewFileAdded; if (localCopy != null) { localCopy(this, new ListEventArgs(data)); }}
And when you want to handle this event:
myObj.NewFileAdded += new EventHandler<ListEventArgs>(myObj_NewFileAdded);
The handler method wowould appear like this:
public void myObj_NewFileAdded(object sender, ListEventArgs e){ // Do what you want with e.Data (It is a List of string)}