与 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;
}
在这种情况下,最好不要直接在 lambda 中使用循环变量,因为它在旧版本的 C# 中无法正常工作。