2011-01-27 7 views
0

Je rencontre actuellement un problème avec un moniteur de journal des événements que j'ai créé il y a un certain temps.Événements C# en même temps ignorés

Mon application s'abonne aux événements EntryWritten du EventLog. J'ai remarqué que si plusieurs événements se produisent en même temps (dans la même seconde), un seul d'entre eux déclenche l'événement qui déclenche mon eventhandler.

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

Est-il possible d'éviter ce comportement, donc ma méthode eventlog_EntryWritten sera appelée pour tous les événements qui sont consignés dans le journal des événements?

Répondre

1

Les événements ne s'exécutent généralement pas en mode asynchrone, et si eventlog_EntryWritten ne se termine pas avant un autre événement, vous manquez probablement les événements. Soulevez votre propre événement asynchrone en utilisant le feu et oubliez la méthode. Je ne suis pas sûr, mais probablement cela sera plus efficace. Ou ayez votre propre classe en utilisant le mécanisme d'interrogation pour lire les événements.

+0

Cela semble raisonnable. Je vais essayer d'utiliser l'usine de tâches de .NET 4 pour ce faire. – kfuglsang

+0

Jusqu'à présent, il semble fonctionner en utilisant cette approche. Merci pour l'aide :) – kfuglsang

2

Il est pire que cela - il est dans un intervalle de cinq secondes:

Le système répond à WriteEntry que si le dernier événement d'écriture a eu lieu au moins cinq secondes auparavant. Cela implique que vous recevrez uniquement une notification d'événement EntryWritten dans un intervalle de cinq secondes, même si plus d'un changement de journal des événements se produit.

(de EventLog.EntryWritten)

Si vous avez besoin de suivre tous les événements, puis (si elles sont à vous), je vous suggère d'ajouter une fonction wrapper autour WriteEntry qui peut attraper toutes les entrées avant » re même écrit dans le journal.

+0

+1 pour cette dernière suggestion. N'utilisez pas d'événements lorsque vous n'en avez pas besoin. –

+0

J'ai trouvé cela aussi, mais cela ne semble pas être le cas. Ce ne sont pas mes événements. J'ai trouvé un exemple où deux événements se sont produits dans les 4 secondes et les deux ont été déclenchés par le gestionnaire d'événements. – kfuglsang

+0

@klugs: Est-ce 4 sec la différence entre quand ils se sont produits ou quand ils ont été écrits? De toute façon, EntryWritten semble être défini pour un autre but que vous le souhaitez. Commencez à travailler. –

Questions connexes