2015-03-30 2 views
1

Моя программа WPF C# позволяет пользователю просматривать элементы: когда пользователь нажимает «Следующие элементы», я отключу кнопку команды, загрузите следующие элементы X и включите кнопку команды. Выполнение команды занимает несколько секунд.Обработка повторяющихся данных от пользователя

Теперь предположим, что пользователь нетерпелив и неоднократно нажимает кнопку «Следующие элементы» (или удерживает соответствующую клавишу). Как я могу воспользоваться этим, используя это как инструмент для ведения поведения по-разному и «перемотки вперед»? Отображать не группу N + 1 и N + 2, но, например, N + 5 и N + 10, и, если пользователь остается, n + 30 и N + 40?

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

Итак, мой вопрос: Как определить, что пользователь хочет, чтобы я спешил, и существует ли распространенная практика для ответа?

Редактировать: Два отличных ответа. Пожалуйста, простите меня, я могу отметить только один, как «выбранный» ответ, спасибо вам обоим!

ответ

1

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

Есть несколько интересных документов в Интернете от Стивена Клири, чтобы вы начали с Async.

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

Но если асинск для вас новый, у вас будет много возможностей для чтения.

http://blog.stephencleary.com/2012/02/async-and-await.html http://blog.stephencleary.com/2014/10/a-tour-of-task-part-5-wait.html

1

Я вы уже знаете, вы будете нуждаться в выборку данных, чтобы быть asynchronous; Я бы сосредоточил внимание на том, как вы будете идентифицировать желание пользователя ускорить перемотку вперед и как его обрабатывать с точки зрения User Experience. Для того, чтобы сохранить пользовательский опыт, я бы рекомендовал устраняя все сомнения относительно того, что они хотят:

  1. зарегистрировав полный щелчок как запрос для следующего набора записей пути соединения вашего события нажатия на Mouse.MouseUp событие
  2. ДАЙ визуальный индикатор того, что случилось, и где они находятся в пределах полным набором данных

примером может быть, если пользователь щелкает один раз и ваши приложения страницы @ 10 записей за клик, то будет отображать «Получение записей с 1 по 10 »и для каждого последующего щелчка: отменить предыдущий Асинхронный запрос, увеличение/уменьшение диапазона записи (отражается также и в пользовательском интерфейсе) и отправьте новый запрос.Это также должно работать в обратном порядке (в случае превышения пользователем диапазона целей).

Смежные вопросы