Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同时忽略C#事件_C#_Event Handling_Event Log - Fatal编程技术网

同时忽略C#事件

同时忽略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的EntryWrited事件。 我注意到,如果多个事件同时发生(在同一秒钟内),则其中只有一个会引发触发我的eventhandler的事件

_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的任务工厂来完成这项工作。到目前为止,似乎使用这种方法是可行的。谢谢你的帮助:)