События C # одновременно игнорируются - PullRequest
0 голосов
/ 27 января 2011

У меня сейчас проблема с монитором журнала событий, который я недавно создал.

Мое приложение подписывается на события EntryWritten в EventLog.Я заметил, что если несколько событий происходит одновременно (в течение одной секунды), только одно из них вызывает событие, которое запускает мой обработчик событий.

_eventLog = new System.Diagnostics.EventLog(_logName);
_eventLog.EntryWritten += new EntryWrittenEventHandler(eventlog_EntryWritten);
_eventLog.EnableRaisingEvents = true;

Можно ли избежать такого поведения, поэтому мой eventlog_EntryWrittenметод будет вызываться для всех событий, которые регистрируются в журнале событий?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Это хуже, чем это - с интервалом в пять секунд:

Система отвечает на WriteEntry, только если последнее событие записи произошло по крайней мере пять секунд назад. Это означает, что вы получите только одно уведомление о событии EntryWritten в течение пятисекундного интервала, даже если происходит более одного изменения журнала событий.

(из EventLog.EntryWritten )

Если вам нужно отслеживать все события (если они ваши), я бы предложил добавить функцию-оболочку для WriteEntry, которая может перехватывать все записи еще до того, как они будут записаны в журнал.

1 голос
/ 27 января 2011

События обычно не запускаются в асинхронном режиме, и поэтому, если eventlog_EntryWritten не завершается до другого события, вы, вероятно, пропустите события. Поднимите свое собственное асинхронное событие в огне и забудьте метод. Я не уверен, но, вероятно, это будет более эффективным. Или иметь свой собственный класс, использующий механизм опроса для чтения событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...