I have a .NET Net C # WinForms application that works great in development, but freezes from time to time during production. I was looking for all ordinary criminals:
1. I used InvokeRequired and Invoke to make sure that no user interface components are being controlled due to incorrect flow.
2. I synchronized all my timer objects in the user interface thread.
3. I read this article http://www.ikriv.com/en/prog/info/dotnet/MysteriousHang.html about OnUserPreferenceChanged, and I had this problem, but I fixed it.
It started when we migrated from .Net 1.1 to .Net 2+. Before that, he never hangs.
I use Managed Stack Explorer to periodically retrieve stack traces from a production application when this problem occurs, and the main UI thread always gets stuck in some new random place. It is not blocked in WaitOne, as you would expect if it were a dead end.
My application does the following:
- Uses multiple instances of System.Timers.Timer.
- Uses WMI to manage print.
- It has several background threads that make web service calls on the server, but do not interact with the user interface.
- It has several background threads that use System.Diagnostics.Process to look at other processes on the computer and sometimes kill them.
- Interacts with a third-party dll using a serial port to talk to a bill acceptor.
- Interacts with some com / activex / ocx commands to interact with a credit card reader.
Here is an example of one time when it freezes and all the stack traces at this time:
Thread ID: 2816 0. System.Threading.WaitHandle.WaitOne (Source Unavailable) 1. System.Threading.WaitHandle.WaitOne (Source Unavailable) 2. System.Threading.WaitHandle.WaitOne (Source Unavailable) 3. System.Management.MTAHelper.WorkerThread (Source Unavailable) 4. System.Threading.ThreadHelper.ThreadStart_Context (Source Unavailable) 5. System.Threading.ExecutionContext.Run (Source Unavailable) 6. System.Threading.ThreadHelper.ThreadStart (Source Unavailable) Thread ID: 2828 Thread ID: 2852 0. MeiNet.EBDS.BillAcceptor.submitRequestStack (Source Unavailable) 1. MeiNet.EBDS.BillAcceptor.OnHandleEscrowed (Source Unavailable) 2. MeiNet.EBDS.BillAcceptor.EventHandler (Source Unavailable) Thread ID: 2908 Thread ID: 2820 0. System.Threading.Thread.Sleep (Source Unavailable) 1. MyApp.ProcessKiller.startSpecialKillerLoop (ProcessKiller.cs:115) 2. System.Threading.ThreadHelper.ThreadStart_Context (Source Unavailable) 3. System.Threading.ExecutionContext.Run (Source Unavailable) 4. System.Threading.ThreadHelper.ThreadStart (Source Unavailable) Thread ID: 2600 Thread ID: 2844 0. System.Threading.Thread.Start (Source Unavailable) 1. System.Net.TimerThread.Prod (Source Unavailable) 2. System.Net.TimerThread.TimerQueue.CreateTimer (Source Unavailable) 3. System.Net.ServicePoint..ctor (Source Unavailable) 4. System.Net.ServicePointManager.FindServicePointHelper (Source Unavailable) 5. System.Net.ServicePointManager.FindServicePoint (Source Unavailable) 6. System.Net.HttpWebRequest.FindServicePoint (Source Unavailable) 7. System.Net.HttpWebRequest.GetRequestStream (Source Unavailable) 8. System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (Source Unavailable) 9. MyApp.MyServer.Server.hb4 (Reference.cs:588) 10. MyApp.HeartbeatSender.SendThreadedHeartbeat (HeartbeatSender.cs:81) 11. MyApp.HeartbeatSender.StartHeartbeatLoop (HeartbeatSender.cs:40) 12. System.Threading.ThreadHelper.ThreadStart_Context (Source Unavailable) 13. System.Threading.ExecutionContext.Run (Source Unavailable) 14. System.Threading.ThreadHelper.ThreadStart (Source Unavailable) Thread ID: 2824 0. System.Threading.Thread.Sleep (Source Unavailable) 1. MyApp.OfficeMonitor.StartMonitoring (OfficeMonitor.cs:84) 2. System.Threading.ThreadHelper.ThreadStart_Context (Source Unavailable) 3. System.Threading.ExecutionContext.Run (Source Unavailable) 4. System.Threading.ThreadHelper.ThreadStart (Source Unavailable) Thread ID: 2584 0. [Internal thisFrame, 'M-->U', System.Windows.Forms.UnsafeNativeMethods::GetModuleHandle] (Source Unavailable) 1. System.Windows.Forms.Application.get_ComCtlSupportsVisualStyles (Source Unavailable) 2. System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintWorker (Source Unavailable) 3. System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintUp (Source Unavailable) 4. System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintOver (Source Unavailable) 5. System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.Paint (Source Unavailable) 6. System.Windows.Forms.ButtonBase.OnPaint (Source Unavailable) 7. System.Windows.Forms.Control.PaintWithErrorHandling (Source Unavailable) 8. System.Windows.Forms.Control.WmPaint (Source Unavailable) 9. System.Windows.Forms.Control.WndProc (Source Unavailable) 10. System.Windows.Forms.ButtonBase.WndProc (Source Unavailable) 11. System.Windows.Forms.Button.WndProc (Source Unavailable) 12. System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Source Unavailable) 13. System.Windows.Forms.Control.ControlNativeWindow.WndProc (Source Unavailable) 14. System.Windows.Forms.NativeWindow.Callback (Source Unavailable) 15. [Internal thisFrame, 'M-->U', System.Windows.Forms.SafeNativeMethods::UpdateWindow] (Source Unavailable) 16. System.Windows.Forms.Control.Update (Source Unavailable) 17. System.Windows.Forms.Control.Refresh (Source Unavailable) 18. MyApp.MainForm.ClearFields (MainForm.cs:4057) 19. MyApp.MainForm.ShowHomeButtons (MainForm.cs:5664) 20. MyApp.MainForm.ShowScreenSaver (MainForm.cs:4284) 21. MyApp.MainForm.ScreensaverTimerTick (MainForm.cs:7817) 22. System.RuntimeMethodHandle.InvokeMethodFast (Source Unavailable) 23. System.Reflection.RuntimeMethodInfo.Invoke (Source Unavailable) 24. System.Delegate.DynamicInvokeImpl (Source Unavailable) 25. System.Windows.Forms.Control.InvokeMarshaledCallbackDo (Source Unavailable) 26. System.Windows.Forms.Control.InvokeMarshaledCallbackHelper (Source Unavailable) 27. System.Threading.ExecutionContext.runTryCode (Source Unavailable) 28. System.Threading.ExecutionContext.RunInternal (Source Unavailable) 29. System.Threading.ExecutionContext.Run (Source Unavailable) 30. System.Windows.Forms.Control.InvokeMarshaledCallback (Source Unavailable) 31. System.Windows.Forms.Control.InvokeMarshaledCallbacks (Source Unavailable) 32. System.Windows.Forms.Control.WndProc (Source Unavailable) 33. System.Windows.Forms.ScrollableControl.WndProc (Source Unavailable) 34. System.Windows.Forms.ContainerControl.WndProc (Source Unavailable) 35. System.Windows.Forms.Form.WndProc (Source Unavailable) 36. System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Source Unavailable) 37. System.Windows.Forms.Control.ControlNativeWindow.WndProc (Source Unavailable) 38. System.Windows.Forms.NativeWindow.Callback (Source Unavailable) 39. [Internal thisFrame, 'M-->U', System.Windows.Forms.UnsafeNativeMethods::DispatchMessageW] (Source Unavailable) 40. System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Source Unavailable) 41. System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (Source Unavailable) 42. System.Windows.Forms.Application.ThreadContext.RunMessageLoop (Source Unavailable) 43. System.Windows.Forms.Application.Run (Source Unavailable) 44. MyApp.MainForm.Main (MainForm.cs:2975)
Any suggestions on what I should do?
source share