Я изучаю некоторые сбои в моем приложении, вызванные исключением Win32, и я сузил его, что он должен произойти в threadpool, который заботится о обработчике событий EventLog.EntryWrittenEventHandler
в моем заявление. Я установить это так:C# Исключение сбоя, которое происходит на ThreadPool
// Create the event log monitor
eventLog.Log = "Application";
eventLog.EnableRaisingEvents = true;
eventLog.EntryWritten += new EntryWrittenEventHandler(EventLogMonitor);
EventLogMonitor
является обработчик для моего случая. Мне интересно, есть ли у кого-нибудь какие-либо идеи относительно того, где я могу узнать, что вызывает это исключение. Похоже, что для прослушивания событий настраивается ThreadPoolWaitOrTimerCallback
, в котором не будет никакого кода на нем, и если это происходит из-за этого, я просто не могу понять, как справиться с этой проблемой. Любая помощь действительно оценена!
Вот выход clrstack в WinDBG:
0:008> !clrstack
OS Thread Id: 0x106c (8)
ESP EIP
049df1c8 7756f871 [HelperMethodFrame: 049df1c8]
049df26c 73ce6fa0 System.Diagnostics.EventLog.get_OldestEntryNumber()
049df27c 73bf24ed System.Diagnostics.EventLog.CompletionCallback(System.Object)
049df2c4 73bf0fe4 System.Diagnostics.EventLog.StaticCompletionCallback(System.Object, Boolean)
049df2f4 744fc3b8 System.Threading._ThreadPoolWaitOrTimerCallback.WaitOrTimerCallback_Context(System.Object, Boolean)
049df300 744fc373 System.Threading._ThreadPoolWaitOrTimerCallback.WaitOrTimerCallback_Context_f(System.Object)
049df304 7400027f System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
049df31c 744fc477 System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(System.Object, Boolean)
049df4ac 74991b5c [GCFrame: 049df4ac]
В случае помогает, мое приложение просто проверить идентификатор события каждой записи записываются в журнал событий, и если она соответствует один из определенный набор идентификаторов, то я запишу его. Аварии случаются редко, а исключением является исключение System.ComponentModel.Win32 с сообщением «Access denied». Похоже, что это может быть проблема с разрешениями, но почему она работает нормально на определенный период, а затем внезапно падает с этим.
Какие исключения это? –
Исключение System.ComponentModel.Win32 с сообщением «Доступ запрещен». Странная вещь случается очень редко, мое приложение, которое работает как услуга, может длиться несколько дней, а затем внезапно сбой происходит с этим. – DukeOfMarmalade
Возможно ли, что вы пытаетесь создать свой собственный, никогда ранее используемый источник событий, и что он падает только тогда? –