2010-12-15 8 views
0

Hey Folks。 私はWindowsのイベントログに書き込むアプリケーションを持っています。 今、同じアプリがイベントログを読み込み、そこにある情報を処理できるようにします。イベントログプログラムから読む

私は私自身のdllを使って読み書きを行います。読書のためのコード:

public static EventLog getEventLog(string Source, string Log) 
    { 
     using(EventLog ev = new EventLog(Log, System.Environment.MachineName, Source)) 
     { 
      if (ev.Entries.Count <= 0) 
      { 
       return null; 
      } 
      else 
      { 
       return ev; 

      }    
     } 
    } 

ここでは、私が返さログで何かをしようとして行うときに、今私は(ObjectDisposedException was unhandled Message=Cannot access a disposed object.)例外を取得私はイベントログ

private void ProcessEvents() 
    { 
     using (EventLog ev = EventComms.EventComms.getEventLog("Application", "Application")) 
     { 
      for (int i = ev.Entries.Count - 1; i >= ev.Entries.Count; i--) 
      { 
       EventLogEntry CurrentEntry = ev.Entries[i]; 
       Console.WriteLine("Event ID : " + CurrentEntry.InstanceId); 
       Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString()); 
       Console.WriteLine("Message : " + CurrentEntry.Message + "\n"); 
      } 
     }     
    } 

を処理するために使用するコードです。 私が使用するときに例外が発生するev.Entries.Count

なぜエラーが発生するのですか?それを処理する最善の方法は何ですか?

答えて

2

返されたEventLogオブジェクトをgetEventLogメソッドに配置しています。 usingステートメントを削除します。実際にはgetEventLogメソッドはnullを返すことができます。これは後でチェックしません。私は(私もどのようにループに変更する)すべて一緒にメソッドを落とし、代わりにこのコードを使用することをお勧め:

private void ProcessEvents() 
{ 
    using (EventLog ev = new EventLog("Application", System.Environment.MachineName, "Application")) 
    { 
    for (int i = ev.Entries.Count - 1; i >= 0; i--) 
    { 
     EventLogEntry CurrentEntry = ev.Entries[i]; 
     Console.WriteLine("Event ID : " + CurrentEntry.InstanceId); 
     Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString()); 
     Console.WriteLine("Message : " + CurrentEntry.Message + "\n"); 
    } 
    } 
} 
+0

素晴らしい:

は、次の同等のコードを試してみてください。どのように私はそれをお見逃しですか?ありがとう。それは今働く。 –

0

あなたgetEventLog機能がEventLogオブジェクトを配置である(それが返したらusing文自動それを配置します) 。

private void ProcessEvents() 
{ 
    using (EventLog ev = new EventLog("Application", System.Environment.MachineName, "Application")) 
    { 
     if (ev.Entries.Count <= 0)) 
     { 
      return; 
     } 

     for (int i = ev.Entries.Count - 1; i >= ev.Entries.Count; i--) 
     { 
      EventLogEntry CurrentEntry = ev.Entries[i]; 
      Console.WriteLine("Event ID : " + CurrentEntry.InstanceId); 
      Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString()); 
      Console.WriteLine("Message : " + CurrentEntry.Message + "\n"); 
     } 
    }     
}