FileSystemEventHandler的其他参数

时间:2010-04-14 09:24:50

标签: c# filesystemwatcher

我正在尝试编写一个程序,可以监视多个文件夹以进行文件创建并启动相同的操作,但每个文件夹的设置不同。我的问题是为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()?

4 个答案:

答案 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”,你可能不得不编写自己的额外代码,我担心。