C # на .net Mobile Framework - свойство формы Windows не изменится - PullRequest
0 голосов
/ 22 июля 2010

Я пишу приложение на c #, которое требует аутентификации пользователя.

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

У меня есть несколько скрытых текстовых полей, которые я хотел бы видеть после входа в систему, когда этот материал запущен, но я не могу заставить его отображаться.

Как правило, когда пользователь нажимает кнопку входа в систему, он проверяет, верны ли его учетные данные, затем должны отображаться сообщения , , и затем могут запускаться какие-то другие функции, за которыми следует другая показанная форма.

После проверки учетных данных, и я знаю, что пользователь действителен, я попытался запустить это:

please_wait.Visible = true;

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

Это тоже не работает. Поле все еще не отображается.

Если я вернусь из функции вправо после того, как я либо запущу поток, либо изменим свойство Visible, все будет работать нормально.

Как мне заставить его работать нормально и иметь больше кода, запускаемого после изменения?

Ответы [ 3 ]

3 голосов
/ 22 июля 2010

Проблема не в том, что вам нужно обновить пользовательский интерфейс из фонового потока. Скорее, вы должны выполнять свою долгосрочную задачу в фоновом потоке и собирать обновления на переднем плане. Это часто делается через BackgroundWorker с уведомлением о прогрессе (например, на индикаторе выполнения).

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

0 голосов
/ 22 июля 2010

Вы пытались добавить вызов в Application.DoEvents ()?Это взлом, но это все, что вам иногда нужно.

0 голосов
/ 22 июля 2010

Наряду с тем, что рекомендует Грег (что, безусловно, является первым шагом, если вы этого еще не делаете), вам также может потребоваться отказаться от некоторого кванта.обновления пользовательского интерфейса (которые имеют довольно низкий приоритет) могут вытесняться до тех пор, пока ваш работник не завершит работу.Добавление Application.DoEvents (или, возможно, Thread.Sleep (1) в фоновом потоке) может дать UI немного времени для рисования планировщика.

...