2011-04-07 1 views
0

두 프로세스 A와 B가 있습니다.Windows와의 다중 스레드 상호 작용 EventLog

프로세스 A는 5 초마다 EventLogEntry를 계속 작성합니다.

프로세스 B는 EventLog 개체의 EntryWritten 이벤트를 수신해야하며 ASAP는 항목이 기록되었음을 화면에보고해야합니다.

수동으로 닫을 때까지 항상 실행되어야하는 프로세스 B. (exe)를 만드는 방법. 이

class Observer 
{ 
    static void Main(string[] args) 
    { 
     EventLog log = new EventLog("logname", "MyMachine", "source"); 

     log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten); 
     log.EnableRaisingEvents = true; 

     // The thread shouldn't exit here but wait till the event is received 
     // When received, should call the handler 
     // and then again keep waiting for next event. 
    } 

    static void log_EntryWritten(object sender, EntryWrittenEventArgs e) 
    { 
     if (e.Entry.Source == "source") 
     { 
      Console.WriteLine("Message " + e.Entry.Message); 
      Console.WriteLine("InstanceId " + e.Entry.InstanceId); 
      Console.WriteLine("Source " + e.Entry.Source); 
      Console.WriteLine("TimeWritten " + e.Entry.TimeWritten); 

      Console.ReadLine(); 
      Console.WriteLine("\n"); 
     } 
    } 
} 

방법이

을 수행 할 수 있습니다 :

Pls는 다음과 같은 코드를 볼?

감사합니다.

static void Main(string[] args) 
{ 
    EventLog log = new EventLog("logname", "MyMachine", "source"); 

    log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten); 
    log.EnableRaisingEvents = true; 

    //Wait for a key to be pressed. 
    Console.ReadKey(); 
} 

답변

1

당신은 log_EntryWritten 핸들러에서 Console.ReadLine에 전화를 제거해야합니다 :

1

이 같은 간단한 뭔가를 시도 할 수 있습니다. 그렇지 않으면 처리기가 차단됩니다.

는 프로그램이 즉시 Main의 끝 부분에이 코드를 추가 할 필요가 종료 것을 방지하려면 키가 콘솔에 누를 때까지

Console.ReadKey(); 

주요 THEAD가 차단합니다. EventLog 클래스에서 EventWritten 이벤트를 처리하는 데 사용되는 스레드는 새 이벤트가 도착할 때마다 처리기를 실행하는 데 사용됩니다.

시스템은 마지막 쓰기 이벤트가 이전에 적어도 6 초 발생한 경우에만 WriteEntry에 응답 : 당신은 당신의 오초 요구 사항에 대한 몇 가지 정보를 가지고 Event.EventWritten Event에서이 견적을 공부해야 제외. 이는 하나 이상의 EntryWritten 이벤트 통지가 6 초 간격으로 수신된다는 것을 의미합니다. 둘 이상의 이벤트 로그 변경이 발생하는 경우에도 마찬가지입니다. WriteEntry 호출 사이에 충분히 긴 수면 간격 (약 10 초)을 삽입하면 이벤트를 놓칠 가능성이 줄어 듭니다. 그러나 쓰기 이벤트가 더 자주 발생하면 다음 간격까지 이벤트 알림을받지 못할 수도 있습니다. 일반적으로 누락 된 이벤트 알림은 손실되지 않지만 지연됩니다.