我正在创建一个FileSystemWatchers列表。
List<ExtSystemFileWatcher> fswMonitors = new List<FileSystemWatcher> ();
列表中的数量是动态的,具体取决于用户。这是从INI文件完成的,并且创建了来自我自己的Monitor类的Monitor对象数组。该类只有变量,如Montior数,监视路径,Ext寻找等。
if (iNumberMonitors > 0)
{
obMonitors = ReadMonitors(iNumberMonitors);
for (int iCounter = 0; iCounter < iNumberMonitors; iCounter++)
{
FileSystemWatcher fswCurrent = new FileSystemWatcher();
fswCurrent.Path = obMonitors[iCounter].strMonPath;
fswCurrent.EnableRaisingEvents = true;
fswCurrent.NotifyFilter = NotifyFilters.FileName;
fswCurrent.Filter = "*." + obMonitors[iCounter].strMonExt;
fswCurrent.Deleted += OnDelete;
fswMonitors.Add(fswCurrent);
}
}
在每个FileSystemWatcher调用Delete On事件时调用的'OnDelete'方法中,我需要知道哪个FileSystemWatchers正在调用它。
我的问题是如何知道List中的哪个FileSystemMonitor正在调用该方法?
答案 0 :(得分:2)
您可以使用闭包来挂钩“删除事件” 而不是传递方法本身:
fswCurrent.Deleted += OnDelete;
你传递了类似
的内容fswCurrent.Deleted += (sender, e) => OnDelete(sender, e, iCounter)
当然,您需要更改OnDelete的签名才能获取额外的索引。 在阅读你的评论后,你可能不需要它,正如其他答案所暗示的那样。
答案 1 :(得分:2)
除了在eventHandler中查看sender
之外,您还需要其他什么吗?
private void OnDelete(object sender, ...)
{
var watcher = (FileSystemWatcher) sender;
// probably list.IndexOf here if you really need an index
}
答案 2 :(得分:1)
事件处理程序有一个sender参数,该参数是对引发事件的FileSystemWatcher的引用。
private static void OnDeleted(object source, FileSystemEventArgs e)
{
FileSystemWatcher watcher = source as FileSystemWatcher;
if(watcher != null)
{
string deletedFile = e.FullPath;
//Update db with watcher and deletedFile
}
}
答案 3 :(得分:1)
“sender”参数将指向事件的发起者
void OnDelete(object sender, EventArgs e)
{
var watcher = ((FileSystemWatcher) sender);
.....
}
答案 4 :(得分:1)
只需转换附加到Deleted事件的事件处理程序的sender参数。
例如:
class Program
{
static void Main(string[] args)
{
var watcher = new FileSystemWatcher { Path = @"c:\temp", Filter = "*.txt" };
watcher.Deleted += watcher_Deleted;
watcher.EnableRaisingEvents = true;
Console.ReadLine();
}
static void watcher_Deleted(object sender, FileSystemEventArgs e)
{
var watcher = sender as FileSystemWatcher;
}
}
答案 5 :(得分:0)
可以检查这些池化对象中是否有一个哈希码。哪个应该是唯一的。