0

我正在使用FileSystemWatcher.

将具有相同类型的事件组合在一起时很容易,在这里(FileSystemEventArgs),我看到关于将额外参数传递给事件处理程序,但将事件传递给事件方法,我不知道如何。

之前,我想做这样的事情:

private void SystemWatch(object sender, 
                         System.IO.RenamedEventArgs e, 
                         System.IO.FileSystemEventArgs f)

但是我们不能改变FileSystemEventHandlerorRenamedEventHandler委托,那么有什么替代方法吗?

4

2 回答 2

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
    ...
于 2013-09-04T02:30:35.663 回答
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
    }
}
于 2013-09-04T12:30:47.307 回答