0

を使用してFileSystemWatcherいます。

ここでは、同じタイプのイベントを組み合わせると簡単です (ここでFileSystemEventArgs)。追加のパラメーターをイベント ハンドラーに渡すことについて見ましたが、イベントをイベント メソッドに渡す方法がわかりません。

前に、私はこのようなことをしたい:

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

FileSystemEventHandlerしかし、またはRenamedEventHandlerデリゲートを変更することはできません。別の方法はありますか?

4

2 に答える 2

2

デリゲートは、イベントに見られるものと同様に、呼び出されると予想されるメソッド シグネチャを定義します。そのため、署名が異なるイベントは、署名が異なるメソッドを暗黙的に呼び出すことはできません。

潜在的な回避策の 1 つは、動的ラムダ メソッドを使用して変換を実行することです。

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変更タイプの情報を提供する type の引数があります。

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 に答える