我正在使用FileSystemWatcher
。
在组合相同类型的事件时很容易,这里(FileSystemEventArgs
),我看到将额外的参数传递给事件处理程序,但是将事件传递给事件方法,我不知道如何。< / p>
之前,我想做这样的事情:
private void SystemWatch(object sender,
System.IO.RenamedEventArgs e,
System.IO.FileSystemEventArgs f)
但是我们无法更改FileSystemEventHandler
或RenamedEventHandler
委托,那么还有其他方式吗?
答案 0 :(得分:2)
代理与事件中发现的代理一样,定义了期望被调用的方法签名。因此,具有不同签名的事件不能隐式调用具有不同签名的方法。
一种可能的解决方法可能是使用动态lambda方法来执行转换:
watcher.Created += (s, a) => SystemWatch(s, null, a);
watcher.Renamed += (s, a) => SystemWatch(s, a, null);
编辑:
经过进一步考虑后,正如McGarnagle所说,RenamedEventsArgs
继承自FileSystemEventArgs
。您应该能够使用单个事件处理程序处理这两个场景:
private static void OnCreatedOrRenamed(object source, FileSystemEventArgs e)
您可以通过检查e
:
if (e is RenamedEventArgs)
...
else
...
答案 1 :(得分:0)
您始终可以使用基本Changed
事件处理程序检查文件是否已创建或重命名:
watcher.Changed += Watcher_Changed;
它具有FileSystemEventArgs
类型的参数,它提供了更改类型的信息:
void Watcher_Changed(object sender, FileSystemEventArgs e)
{
switch (e.ChangeType)
{
case WatcherChangeTypes.Created:
break; // file was created
case WatcherChangeTypes.Renamed:
break; // file was renamed
}
}