我可以为一种方法组合两个或更多不同的事件吗?

时间:2013-09-04 02:11:08

标签: c# winforms filesystemwatcher

我正在使用FileSystemWatcher

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

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

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

但是我们无法更改FileSystemEventHandlerRenamedEventHandler委托,那么还有其他方式吗?

2 个答案:

答案 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
    }
}