我正在尝试编写一个程序,可以监视多个文件夹以进行文件创建并启动相同的操作,但每个文件夹的设置不同。我的问题是为FileSystemEventHandler指定一个额外的参数。我为每个目录创建一个新的FileWatcher来监视并添加Created-action的处理程序:
foreach (String config in configs)
{
...
FileWatcher.Created += new System.IO.FileSystemEventHandler(FileSystemWatcherCreated)
...
}
void FileSystemWatcherCreated(object sender, System.IO.FileSystemEventArgs e, MySettings mSettings)
{
DoSomething(e.FullPath, mSettings);
}
如何将'mSettings'变量传递给FileSystemWatcherCreated()?
答案 0 :(得分:6)
foreach (String config in configs)
{
...
FileWatcher.Created += (s,e) => DoSomething(e.FullPath, mSettings);
...
}
答案 1 :(得分:6)
foreach (String config in configs)
{
...
MySettings mSettings = new MySettings(...); // create a new instance, don't modify an existing one
var handler = new System.IO.FileSystemEventHandler( (s,e) => FileSystemWatcherCreated(s,e,msettings) );
FileWatcher.Created += handler;
// store handler somewhere, so you can later unsubscribe
...
}
void FileSystemWatcherCreated(object sender, System.IO.FileSystemEventArgs e, MySettings mSettings)
{
DoSomething(e.FullPath, mSettings);
}
答案 2 :(得分:0)
您不能要求提供比FileWatcher
处理程序提供的更多信息。但是,您可以创建一个可以访问配置的小类,还有一个可以附加到FileWatcher
的{{1}}事件
Created
答案 3 :(得分:0)
您需要了解您正在使用的内容。 FileSystemEventHandler
的定义是 -
public delegate void FileSystemEventHandler(object sender, FileSystemEventArgs e);
你不能传递第三个参数。 为了传递数据“mSettings”,你可能不得不编写自己的额外代码,我担心。