title: What's causing my c# WinForms application to freeze / hang?
body: <p>I have a .Net 2.0 C# WinForms application that runs fine in development but occasionally freezes in production. I have looked for all the usual culprits:<br>
  1. I've used InvokeRequired and Invoke to make sure that no UI components are manipulated from the wrong thread.<br>
  2. I've synchronized all my timer objects on the UI thread.<br>
  3. I've read this article <a href="http://www.ikriv.com/en/prog/info/dotnet/MysteriousHang.html" rel="nofollow">http://www.ikriv.com/en/prog/info/dotnet/MysteriousHang.html</a> about OnUserPreferenceChanged and I did have this problem, but I fixed it.</p>
  
  <p>This started happening when we migrated from .Net 1.1 to .Net 2+. Before that, it never hang.</p>
  
  <p>I'm using Managed Stack Explorer to periodically get stack traces from the production application when this problem occurs and the main UI thread is always stuck in some new random place. It's not blocked on WaitOne as you might expect if this were a thread deadlock.</p>
  
  <p>My application does these things:<br>
  - Uses multiple System.Timers.Timer instances.<br>
  - Uses WMI to manage printing.<br>
  - Has a few background threads that make Web Services calls to a server, but do not interact with the UI.<br>
  - Has a few background thread that use System.Diagnostics.Process to look at other processes on the computer and sometimes kill them.<br>
  - Interacts with a 3rd party dll that uses the serial port to talk to a bill acceptor.<br>
  - Interacts with some com/activex/ocx controls to interact with a credit card reader.  </p>
  
  <p>Here's an example of one time it hang and all the stack traces at the time:</p>
  
  <pre><code>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--&gt;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--&gt;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--&gt;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)
  </code></pre>
  
  <p>Any suggestions on what I ought to do?</p>