同时忽略C#事件
我最近在不久前创建的事件日志监视器上遇到问题 我的应用程序订阅EventLog的EntryWrited事件。 我注意到,如果多个事件同时发生(在同一秒钟内),则其中只有一个会引发触发我的eventhandler的事件同时忽略C#事件,c#,event-handling,event-log,C#,Event Handling,Event Log,我最近在不久前创建的事件日志监视器上遇到问题 我的应用程序订阅EventLog的EntryWrited事件。 我注意到,如果多个事件同时发生(在同一秒钟内),则其中只有一个会引发触发我的eventhandler的事件 _eventLog = new System.Diagnostics.EventLog(_logName); _eventLog.EntryWritten += new EntryWrittenEventHandler(eventlog_EntryWritten); _eventL
_eventLog = new System.Diagnostics.EventLog(_logName);
_eventLog.EntryWritten += new EntryWrittenEventHandler(eventlog_EntryWritten);
_eventLog.EnableRaisingEvents = true;
是否有可能避免此行为,因此将为记录到事件日志的所有事件调用我的eventlog\u EntryWrite方法?比这更糟糕-它在五秒钟的时间间隔内: 仅当上次写入事件至少发生在5秒之前时,系统才会响应WriteEntry。这意味着您在五秒钟的时间间隔内只会收到一个EntryWrite事件通知,即使发生了多个事件日志更改 (来自)
如果您需要跟踪所有事件(如果它们是您的),我建议在WriteEntry周围添加一个包装函数,它可以在将所有条目写入日志之前捕获它们。比这更糟糕-它在五秒钟的时间间隔内: 仅当上次写入事件至少发生在5秒之前时,系统才会响应WriteEntry。这意味着您在五秒钟的时间间隔内只会收到一个EntryWrite事件通知,即使发生了多个事件日志更改 (来自)
如果您需要跟踪所有事件(如果它们是您的),我建议在WriteEntry周围添加一个包装函数,可以在写入日志之前捕获所有条目。事件通常不会以异步模式运行,因此如果eventlog\u EntryWrite在另一个事件之前没有完成,您可能会错过事件。在fire and forget方法中引发您自己的异步事件。我不确定,但这可能会更有效。或者让您自己的类使用轮询机制来读取事件。事件通常不会在异步模式下运行,因此如果eventlog\u EntryWrite在另一个事件之前没有完成,您可能会错过这些事件。在fire and forget方法中引发您自己的异步事件。我不确定,但这可能会更有效。或者让您自己的类使用轮询机制来读取事件。+1了解最后的建议。不要在不需要的时候使用事件。我也发现了这一点,但事实似乎并非如此。它们不是我的活动。我发现了一个例子,其中两个事件在4秒内发生,并且都是由事件处理程序触发的。@klugs:它们发生的时间和写入的时间相差4秒吗?无论如何,EntryWrite的定义似乎另有目的。开始研究。最后一个建议+1。不要在不需要的时候使用事件。我也发现了这一点,但事实似乎并非如此。它们不是我的活动。我发现了一个例子,其中两个事件在4秒内发生,并且都是由事件处理程序触发的。@klugs:它们发生的时间和写入的时间相差4秒吗?无论如何,EntryWrite的定义似乎另有目的。开始工作吧,这听起来很合理。我将尝试利用.NET4的任务工厂来完成这项工作。到目前为止,似乎使用这种方法是可行的。谢谢你的帮助:)这听起来很合理。我将尝试利用.NET4的任务工厂来完成这项工作。到目前为止,似乎使用这种方法是可行的。谢谢你的帮助:)