Как заблокировать ввод при выполнении асинхронного вызова WCF? - PullRequest
0 голосов
/ 12 октября 2011

Я работаю над приложением на Windows Phone и использую silverlight. У меня есть некоторые ошибки, когда пользователь может быстро нажать кнопку дважды, что фактически сделает 2 вызова WCF, так как действие вызывается 2 раза.

Очевидное решение - просто отключить кнопку до завершения вызова, но мне интересно, есть ли более глобальное решение, в котором мне не пришлось бы реализовывать это для каждого действия. Мое приложение использует около 50 методов WCF, поэтому было бы утомительно реализовывать это для каждого отдельного действия / каждого экрана.

Существует также ситуация, когда пользователи могут нажать кнопку возврата телефона во время разговора и начать нажимать другие кнопки и т. Д. *

Кто-нибудь знает чистое решение для этого?

Ответы [ 3 ]

0 голосов
/ 12 октября 2011

Используете ли вы шаблон проектирования, такой как MVVM, в своем приложении? Если нет, то, вероятно, следует. В этом случае вы можете создать свойство bool с именем IsIdle или что-то подобное. Затем просто установите <Button IsEnabled="{Binding IsIdle}". Теперь, когда вы начинаете делать асинхронный вызов, установите IsIdle в false. Это отключит кнопки. Когда загрузка будет завершена, установите для нее значение true, чтобы все кнопки были снова включены.

0 голосов
/ 13 октября 2011

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

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

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

0 голосов
/ 12 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...