Tôi đang điều tra một số sự cố trong ứng dụng của tôi do ngoại lệ Win32 gây ra và tôi đã thu hẹp ngoại lệ rằng nó phải xảy ra trong threadpool đang xử lý trình xử lý sự kiện EventLog.EntryWrittenEventHandler
trong ứng dụng. Tôi thiết lập điều này như sau:C# Nắm bắt ngoại lệ xảy ra trên ThreadPool
// Create the event log monitor
eventLog.Log = "Application";
eventLog.EnableRaisingEvents = true;
eventLog.EntryWritten += new EntryWrittenEventHandler(EventLogMonitor);
EventLogMonitor
là trình xử lý sự kiện của tôi. Tôi tự hỏi không ai có bất kỳ ý tưởng nào về nơi tôi có thể tìm ra cái gì gây ra ngoại lệ này. Có vẻ như để lắng nghe các sự kiện, ThreadPoolWaitOrTimerCallback
đang được thiết lập, sẽ không có bất kỳ mã nào của tôi trên đó, và nếu ngoại lệ xảy ra thì tôi không thể xem cách giải quyết vấn đề này. Bất kỳ trợ giúp được thực sự đánh giá cao!!
Dưới đây là sản phẩm của clrstack trong 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]
Trong trường hợp nó giúp, ứng dụng của tôi chỉ là kiểm tra các sự kiện ID của mỗi entry ghi vào nhật ký sự kiện, và nếu nó phù hợp với một trong một số ID nhất định sau đó tôi đăng nhập nó. Các sự cố xảy ra ít khi xảy ra sự cố và ngoại lệ là ngoại lệ System.ComponentModel.Win32 với thông báo 'Truy cập bị từ chối'. Nghe có vẻ như nó có thể là một vấn đề quyền nhưng tại sao nó sẽ làm việc ok trong một thời gian nhất định và sau đó đột nhiên sụp đổ với điều này.
Những loại trừ nó là gì? –
System.ComponentModel.Win32 ngoại lệ với thông báo 'Truy cập bị từ chối'. Điều kỳ lạ là nó hiếm khi xảy ra, ứng dụng của tôi chạy như một dịch vụ có thể mất vài ngày và đột nhiên nó bị treo với điều này .. – DukeOfMarmalade
Có thể bạn đang cố tạo ra nguồn sự kiện của riêng bạn, chưa bao giờ được sử dụng trước đây, và nó chỉ đổ vỡ sau đó? –