与nvoigt说的相反,我认为创建一个从FileSystemWatcher
派生的类型是一种矫枉过正。
更好的选择是让您的CustomDirectorySetting
类型的事件处理程序,这意味着它将能够通过this
访问您需要的数据。
class CustomDirectorySetting
{
public string Directory { get; set; }
public void OnChanged(object sender, FileSystemEventArgs e)
{
// your code here
}
}
…
List<CustomDirectorySetting> list = …;
foreach (var setting in list)
{
var fsw = new FileSystemWatcher(setting.Directory);
fsw.Changed += setting.OnChanged;
fsw.EnableRaisingEvents = true;
}
另一种选择是使用lambda:
private static void OnChanged(
CustomDirectorySetting setting, FileSystemEventArgs eventArgs)
{
// your code here
}
…
foreach (var setting in list)
{
var fsw = new FileSystemWatcher(setting.Directory);
CustomDirectorySetting settingCopy = setting;
fsw.Changed += (sender, eventArgs) => OnChanged(settingCopy, eventArgs);
fsw.EnableRaisingEvents = true;
}
在这种情况下,它可能是一个好主意,不要直接在拉姆达使用循环变量,因为它会无法正常工作旧版本的C#。
什么是CustomDirectorySetting对象? – Paparazzi 2013-04-10 14:20:43
@Blam - 对于混淆抱歉 - 我应该解释说这是一种特定于应用程序的自定义类型。它不是BCL的一部分。 – STLDeveloper 2013-04-10 16:22:37