2016-12-17 7 views
0

Недавно я реализовал некоторые (базовые) необработанные обработчики ошибок в моем приложении C# (WinForms). UnhandledExceptionEventHandler отлично работает, но в ThreadExceptionEventHandler я сталкиваюсь с чем-то странным.C# /. NET ThreadException - Ошибка создания дескриптора окна

При закрытии приложения через это.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) 

Приложение затем переходит к крупным, казалось бы, нормально. Моя лучшая догадка - это некоторая форма утечки памяти или неправильное обращение с задачей, но ничто из того, что мне удалось найти в Интернете до сих пор, очень помогло.

Любые идеи и предложения приветствуются. Заранее спасибо

UPDATE: Интересно, что ошибка прекратилась ... Не знаете почему. Однако я ожидаю, что он вернется. Более долгосрочное решение было бы замечательным.

+0

Вы закрываете свои потоки изящно перед выходом из приложения? – bansi

+0

Это * очень * распространенная ошибка в приложении Winforms, программисты не понимают опасности методов Controls.Clear() и Controls.Remote/At() достаточно хорошо. Очень часто используются неправильно, не понимая, что им следует использовать Dispose(). Дополнительное удовольствие, потому что, когда утечка элементов управления, наконец, приводит к сбою программы, диалоговое окно с исключениями также будет бомбить. –

ответ

0

Как сказал Банси: Если вы закрываете форму в своем приложении WinForm, убедитесь, что все потоки, использующие эту форму, закрыты ранее. Последняя строка трассировки стека (System.Windows.Forms.NativeWindow.Callback) дает подсказку, поток пытается отправить сообщение в уже закрытую форму и больше не имеет дескриптора окна.

Смежные вопросы