2016-12-17 22 views
0

最近、C#(WinForms)アプリケーションで未処理のエラーハンドラを実装しました。 UnhandledExceptionEventHandlerはうまく動作しますが、ThreadExceptionEventHandlerでは私は何か奇妙なことをしています。C#/。NET ThreadException - ウィンドウハンドルの作成中にエラーが発生する

this.Close()、標準WinFormsの閉じるボタン、Application.Exit()などを使用してアプリケーションを終了すると、アプリケーションが終了すると非常に短いエラーが発生します。

スタックトレース

が記録されますが、それは私を与えるすべてはこれです:

System.ComponentModel.Win32Exception (0x80004005): Error creating window handle. 
at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp) 
at System.Windows.Forms.Control.CreateHandle() 
at System.Windows.Forms.Control.get_Handle() 
at System.Windows.Forms.Control.CreateGraphicsInternal() 
at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t) 
at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t) 
at System.Windows.Forms.Control.WndProcException(Exception e) 
at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

アプリケーションは、一見通常、閉鎖に移行します。私の最高の推測は、メモリリークのいくつかの形式または不適切に処理されたタスクのシャットダウンですが、私は今までにインターネット上で見つけることができなかった多くの助けがされている。

アイデアや提案は高く評価されます。事前に感謝します

更新:興味深いことに、エラーが発生して停止しています...理由はわかりません。しかし、私はそれが戻るかもしれないと思います。より長期的な解決策が素晴らしいでしょう。

+0

アプリケーションを終了する前にスレッドを正常にシャットダウンしていますか? – bansi

+0

Winformsアプリケーションでは、非常に一般的なバグです。プログラマは、Controls.Clear()およびControls.Remote/At()メソッドの危険性を十分に理解していません。頻繁に間違って使用され、Dispose()を代わりに使用する必要があることに気づいていません。余分な楽しみは、制御漏れが最終的にプログラムをクラッシュさせるため、例外ダイアログも同様に爆発するからです。 –

答えて

0

bansi氏:WinFormアプリケーションでフォームを閉じる場合、このフォームを使用するすべてのスレッドが以前にシャットダウンされていることを確認してください。スタックトレースの最後の行(System.Windows.Forms.NativeWindow.Callback)は、ヒントを返します。スレッドは、既に閉じられているウィンドウのハンドルを持たないフォームにメッセージを送信しようとします。

関連する問題