在服务应用程序中我正在遍历Windows应用程序事件日志来解析事件,以便对输入消息作出反应。 在事件日志已满的情况下(Windows通常会通过删除旧条目来确保有足够的空间 - 这可以在eventvwr.exe
设置中进行配置),但该服务始终在遍历EventLog.Entries
集合时运行到IndexOutOfBoundsException
。无论我如何迭代(for-loop,使用集合枚举器,将集合复制到数组中,...),我似乎都无法摆脱这个'bug'。通过事件日志条目集合进行迭代,IndexOutOutOfBoundsException
目前,我通过解析事件日志文件并删除最后几个节点来定期删除最后几个项目,以确保日志未满以保持服务正常运行(不要殴打我,我不能找不到更好的选择...)。
如何在不尝试访问已经删除的条目的情况下遍历集合?
是否有更优雅的方法?我只是试图访问在最后x
秒内写入的日志(即使LINQ在日志已满时也没有选择这些日志 - 同样的例外),这可以帮助吗?
感谢您的任何建议和提示
弗兰克
编辑:我忘了提,我的假设是循环正在访问其正在由Windows迭代过程中删除的条目。基本上这就是为什么我试图克隆收藏。是否有可能为我的应用程序锁定少量时间的集合?
当然,当条目消失时,我无能为力。无论如何,在这种情况下循环会取消,并且可能会跳过一些应该触发我的服务中的处理事件的条目。在下一个检查循环中,我的程序将这些条目处理为过时(因为它应该先处理它们),并且它们根本不会发射任何东西。 – fjdumont 2011-01-12 14:16:24