Узнайте, почему элементы управления не обновляются в пользовательском интерфейсе в приложении Mobile Forms - PullRequest
0 голосов
/ 15 августа 2011

Фон

Это приложение Compact Framework 3.5 Forms.В процессе отображения формы статические (это означает, что элементы управления, размещенные в форме как есть ), заполняются в потоке пользовательского интерфейса, а те, которые могут потребовать загрузки данных, заполняются в отдельном потоке.пользовательский интерфейс один.

Я использую Control.Invoke для синхронизации заполнения элементов управления с данными в потоке пользовательского интерфейса.

Примечание: пользовательский интерфейс не застревает, и он работаеткак и ожидалось.

Проблема

Элементы управления, такие как ListBox , даже если у них есть элементы, они не отображаются в пользовательском интерфейсе.

Всякий раз, когда элемент добавляется, код вызывает метод ListBox.Update, чтобы перерисовать его.


Не дадите ли вы мне подсказку о том, что происходит?

ПРИМЕЧАНИЕ : я мог бы вставить сюда некоторый код, но я нахожу это бесполезным, потому что речь идет только о запуске потока путем создания единицы (new Thread(...).Start()) и во время выполнения этого потока,Я вызываю какой-то метод Invoke.

Заранее благодарю за ваши предложения и время.


ОБНОВЛЕНИЕ Я получу его, если я создаю элемент управлениякак ListBox в синхронизированном с UI действии потока, используя Control.Invoke.В любом случае, мне все еще нужно решить это, когда элемент управления создается с помощью дизайнера, потому что таким образом проще разместить элементы управления.Благодарю.

1 Ответ

0 голосов
/ 15 августа 2011

Я заметил, что многие элементы управления, созданные в отдельном потоке, ведут себя странно или вообще исчезают, когда возвращаются в основной поток выполнения.Возможно, они становятся сиротами или ... чем-то.

Вот что лучше всего сработало для меня: поместите элементы управления в форму (установите Visible = false, Width = 0 и т. Д., Если вы не хотитеувидеть их) и просто передать данные обратно из вашего потока.Когда данные вернутся, заполните ваши элементы управления данными.Как правило, я создаю класс, который содержит возвращаемые значения, которые я ищу, и возвращаю экземпляр класса.

При этом я должен опрокинуть шляпу и сказать, что Крис Тэк действительно знает, что он делает.Я пользуюсь его руководством с момента выхода XP и использую Outlook Express для чтения из групп новостей Microsoft.

...