Проблема с пользовательскими нарисованными TextBoxes и методами KeyDown/DoubleClick

Я борюсь с этим исключением под Windows Mobile 6.5

System.NotSupportedException was unhandled
Message="Control.Invoke must be used to interact with controls created on a separate thread."
StackTrace:
in Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
in System.Windows.Forms.Control.Dispose(Boolean disposing)
in OpenNETCF.Windows.Forms.OwnerDrawnList.Dispose()
in OpenNETCF.Windows.Forms.OwnerDrawnList.Finalize()

Я использую Список текстовых полей из OPENNETCF как необычно выглядящее меню. Они отрисованы на заказ, но я обнаружил, что нет ничего плохого в удалении / создании всех этих объектов, пока не будет вызван метод в DoubleClick или KeyDown. В этом методе я запускаю DataGrid и все, что всегда работало.

Когда я выхожу из главной формы, это исключение выдается. Это никак не влияет на приложение, за исключением этого большого уродливого исключения win32 в конце использования приложения. Что мне не хватает? Я избавляюсь от этих объектов перед перерисовкой формы.


@ EDIT Мне удалось это исправить, избавившись от всех этих объектов не в событии Form.Disposed, которое действует после удаления родительского класса, а в событии Form.Closing. Я предполагаю, что NETCF использует некоторую многопоточность в фоновом режиме, которая удаляется windows.form.

1 ответ

Причина, по которой он кричит на вас, что вы вызываете метод управления из другого потока, заключается в том, что вы позволяете сборщику мусора очистить ваши элементы управления, и пока он очищает, GC в конечном итоге вызывает Dispose для вас. Причина, по которой он говорит, что другой поток вызывает ваши элементы управления, заключается в том, что сборщик мусора работает в отдельном потоке. Чтобы решить вашу проблему, вы можете использовать оператор Using или напрямую вызвать Dispose в вашей форме, когда ваша программа закрывается.

Другие вопросы по тегам