私は.NET 2.0のC#WinFormsアプリケーションを開発中に正常に動作しますが、時にはプロダクションでフリーズします。
1.私はInvokeRequiredとInvokeを使用して、UIコンポーネントが間違ったスレッドから操作されていないことを確認しました。
2. UIスレッドですべてのタイマーオブジェクトを同期しました。
3. OnUserPreferenceChangedについてこの記事http://www.ikriv.com/en/prog/info/dotnet/MysteriousHang.htmlを読んだところ、この問題がありましたが、修正しました。私のC#WinFormsアプリケーションをフリーズ/ハングさせる原因となっている愚かなエラーですか?
これは、.NET 1.1から.Net 2+に移行したときに起きたことです。その前に、それは決して掛からない。
私はマネージドスタックエクスプローラを使用して、この問題が発生し、メインのUIスレッドが常に新しいランダムな場所にスタックされている場合、運用アプリケーションからスタックトレースを定期的に取得しています。これがスレッドデッドロックの場合には、WaitOneでブロックされません。
私のアプリケーションは次のことを行います。
- 複数のSystem.Timers.Timerインスタンスを使用します。
- WMIを使用して印刷を管理します。
- Webサービスをサーバーに呼び出すが、UIとやり取りしないバックグラウンドスレッドがいくつかあります。
- System.Diagnostics.Processを使用してコンピュータ上の他のプロセスを調べ、時にはそれらを強制終了するバックグラウンドスレッドをいくつか持っています。
- シリアルポートを使用して請求書受領者と通話する第三者dllと対話します。
- いくつかのcom/activex/ocxコントロールと相互作用して、クレジットカードリーダーとやりとりします。
は、ここで1時間の一例は、それがハングアップしてい時点で、すべてのスタックトレース:私は何をするべきで
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)
任意の提案ですか?
ハングアップすると、ユーザーインターフェイスが応答しなくなったことを意味しますか?または、いくつかのエラーメッセージが表示されますか? – CodingBarfield
@Nobody私は誰もあなたに、あなたが特にSOの範囲外のコードのすべてを見ずにハングアップする原因について何かアドバイスを与えることはできないと考えています。 – msarchet
あなたが何かを待つよう指示したときに、デッドロックが発生するだけではありません。何かをロックしていて、別のスレッドがロックしようとすると、デッドロックが発生する可能性があります。メソッドがまだ初期化されていないものに依存し、ロックが必要な場合、デッドロックが発生する可能性があります。スレッドなどを使うときには注意してください。 – Crisfole