我可以为一个方法组合两个或多个不同的事件吗
本文关键字:事件 组合 一个 方法 我可以 两个 | 更新日期: 2023-09-27 18:30:08
我使用的是FileSystemWatcher
。
将具有相同类型的事件组合在一起很容易,在这里(FileSystemEventArgs
),我看到了将额外的参数传递给事件处理程序,但将事件传递给事件方法,我不知道怎么做。
之前,我想做这样的事情:
private void SystemWatch(object sender,
System.IO.RenamedEventArgs e,
System.IO.FileSystemEventArgs f)
但是我们不能更改FileSystemEventHandler
或RenamedEventHandler
委托,那么有其他方法吗?
委托与事件中的委托一样,定义期望调用的方法签名。因此,具有不同签名的事件不能隐式调用具有不同签名(signature)的方法。
一个潜在的解决方法可能是使用动态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
...
您可以随时检查文件是否使用基本的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
}
}