Заставить пользователя ждать 30 секунд в Compact Framework - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть приложение, в котором я отправляю SMS на сервер, который возвращает результат в виде SMS.Поэтому я поместил перехватчик сообщений с обработчиком событий.Проблема в том, что после отправки запроса мне нужно подождать 30 секунд, прежде чем я продолжу операцию.Как мне заставить мое приложение ждать до этого.если я использую Thread.sleep, то это делает все приложение спящим, и я не получаю никакого ответа.

Любая идея, как справиться с этим

Заранее спасибо Biju * ​​1005 *

Ответы [ 3 ]

0 голосов
/ 21 февраля 2011

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

также, в качестве примечания, если вы когда-нибудь подумаете: «Ну и дела, Thread.Sleep(1000) будет отлично работать здесь», сделайте шаг назад и изучите ситуацию. В большинстве случаев вы можете делать это асинхронно с событиями.

0 голосов
/ 22 февраля 2011

Я предполагаю, что вы пытаетесь сделать так, чтобы пользователь не продвигался до тех пор, пока он не получит действительный ответ от SMS, как своего рода аутентификация с таймаутом в 30 секунд, если ответ не был получен.

Для этого вы можете отобразить модальное диалоговое окно, которое просто отображает сообщение «Ожидание ответа SMS ...» и закрыть диалоговое окно по истечении 30 секунд (с использованием таймера) или при получении ответа от SMS.

0 голосов
/ 21 февраля 2011

Похоже, вы могли бы использовать какой-то таймер.Если вам нужно выполнить свой код в потоке пользовательского интерфейса, вы можете использовать System.Windows.Forms.Timer ;если вы довольны выполнением в потоке пула потоков, вы можете использовать System.Threading.Timer или System.Timers.Timer .

Я незаранее знать, какие из них доступны в Compact Framework, но я ожидаю, что по крайней мере один из них будет.

Если они действительно недоступны, то один из вариантов, который довольно хакерский, но сработает, - этосоздайте новый поток, который просто спит в течение 30 секунд, а затем либо выполняет необходимый код, либо выполняет маршалы в поток пользовательского интерфейса (используя Control.Invoke / BeginInvoke) для выполнения там при необходимости.Это такой грубый таймер, какой только можно получить, но он должен работать.

...