Estoy investigando algunos bloqueos en mi aplicación causados por una excepción de Win32, y he reducido que debe estar ocurriendo en el threadpool que se está ocupando del controlador de eventos EventLog.EntryWrittenEventHandler
en mi solicitud. Lo configuran como esto:C# excepción de captura que está ocurriendo en ThreadPool
// Create the event log monitor
eventLog.Log = "Application";
eventLog.EnableRaisingEvents = true;
eventLog.EntryWritten += new EntryWrittenEventHandler(EventLogMonitor);
EventLogMonitor
es el controlador para mi evento. Me pregunto si alguien tiene alguna idea sobre dónde podría averiguar cuál es la causa de esta excepción. Parece que para escuchar eventos se está configurando un ThreadPoolWaitOrTimerCallback
, que no tendría ninguno de mis códigos, y si ocurre la excepción en esto, simplemente no puedo ver cómo tratar este problema. ¡¡Cualquier ayuda es muy apreciada!!
Aquí está la salida de clrstack en 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]
En caso de que ayuda, mi solicitud es simplemente comprobando el ID de evento de cada entrada escrita en el registro de eventos, y si coincide con uno de una cierto conjunto de ID luego lo registro. Los bloqueos suceden silenciosamente rara vez, y la excepción es una excepción System.ComponentModel.Win32 con el mensaje 'Acceso denegado'. Parece que podría tratarse de un problema de permisos, pero ¿por qué funcionaría bien durante un cierto período y luego se interrumpiría repentinamente con esto?
¿Qué tipo de excepción es? –
Excepción System.ComponentModel.Win32 con el mensaje 'Acceso denegado'. Lo extraño es que ocurre muy raramente, mi aplicación que se ejecuta como un servicio puede durar días y de repente se cuelga con esto .. – DukeOfMarmalade
¿Es posible que intente crear su propia fuente de eventos, nunca antes utilizada, y que se bloquea solo entonces? –