2013-09-04 1 views
0

나는 FileSystemWatcher을 사용하고 있습니다.한 가지 방법에 대해 둘 이상의 다른 이벤트를 결합 할 수 있습니까?

이벤트를 같은 유형 (여기서는 FileSystemEventArgs)으로 결합하면 쉽게 처리 할 수 ​​있습니다. 이벤트 처리기에 추가 매개 변수를 전달하는 방법에 대해 알아 봤지만 이벤트 메서드에 이벤트를 전달하는 방법은 잘 모르겠습니다. 그래서 어떤 다른 방법이,

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

그러나 우리는 FileSystemEventHandler 또는 RenamedEventHandler 대리자를 변경할 수 없습니다 :

전에, 나는 이런 일을하고 싶지?

+2

기다림 ... 뭐? RenamedEventArgs *는 FileSystemEventArgs를 상속합니다. 왜 둘 다 필요했을까요? – McGarnagle

+0

왜 모든 이벤트가 하나의 처리기를 통과하도록 하시겠습니까? 그런 다음 이벤트를 다시 분리하기 위해 처리기 내에 논리를 도입해야합니까? – Enigmativity

답변

2

이벤트에서 발견되는 대표와 마찬가지로 대리인은 호출 될 것으로 예상되는 메서드 서명을 정의합니다. 이와 같이, 서명이 다른 이벤트는 내재적으로 다른 서명을 가진 메소드를 호출 할 수 없습니다.

하나의 잠재적 인 해결 방법은 변환을 수행하는 동적 람다 방법을 사용할 수 있습니다 :

watcher.Created += (s, a) => SystemWatch(s, null, a); 
watcher.Renamed += (s, a) => SystemWatch(s, a, null); 

편집 : 더 고려 후

, FileSystemEventArgs에서 McGarnagle가 언급 한 바와 같이, RenamedEventsArgs 상속합니다. 파일이 생성 된 경우

if (e is RenamedEventArgs) 
    ... 
else 
    ... 
0

당신은 항상 확인할 수 있습니다

private static void OnCreatedOrRenamed(object source, FileSystemEventArgs e) 

당신은 그것을 e의 종류를 확인하여 어떤 동작을 알 수 있습니다 : 당신은 하나의 이벤트 핸들러를 사용하여 두 시나리오를 처리 할 수 ​​있어야합니다 또는 기본 Changed 이벤트 핸들러 이름 :

watcher.Changed += Watcher_Changed; 

그것은 차의 정보를 제공 FileSystemEventArgs 유형의 인수를 가지고 nge 유형 :

void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
    switch (e.ChangeType) 
    { 
     case WatcherChangeTypes.Created:    
      break; // file was created 
     case WatcherChangeTypes.Renamed: 
      break; // file was renamed 
    } 
}