处理来自用户的重复输入
Handling repetitive input from the user
我的 WPF C# 程序允许用户浏览项目:当用户单击 "Next Items" 我禁用命令按钮,加载下 X 个项目,然后启用命令按钮。执行命令需要几秒钟。
现在,假设用户不耐烦并反复点击 "Next Items" 按钮(或按住相应的键)。我如何利用这一点,将其用作行为不同和 "fast forward" 项目组的提示?不显示组 N+1 和 N+2,而是例如 N+5 和 N+10,如果用户坚持,则显示 n+30 和 N+40?
我 可以 将处理委托给后台任务,保持按钮启用,并将 "click while previous command had not yet been processed" 解释为指示加快速度并将一些调用放在一起。但恐怕我让事情变得复杂了:这似乎是普遍的需求,希望有既定的解决方案。
所以,我的问题是:我如何确定用户希望我快点处理,是否有响应的普遍做法?
编辑:两个很好的答案。请原谅我,我只能标记一个作为"selected"答案,但谢谢你们!
您必须开始使用异步方法并使用取消令牌。
但是朝着它努力,不要一步完成所有事情。
首先实现异步,然后才添加取消。
互联网上有一些来自 Steven Cleary 的有趣文档可以帮助您开始使用 Async。
这样做的关键在于,由于您使用异步委托给后台线程,因此您的 GUI 始终保持响应。
当你的用户快速按下按钮并且一个很长的 运行 进程仍然很忙时,你可以通过检查取消标记来取消它,然后简单地发出一个新任务。
但是如果 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
我知道你需要获取数据 asynchronous
;我将重点介绍如何识别用户快进的愿望以及如何从 User Experience
的角度处理它。为了保持用户体验,我建议通过以下方式消除对他们想要什么的所有疑问:
- 通过将您的点击事件连接到
Mouse.MouseUp
事件,将完整的点击注册为对下一组记录的请求
- 给出一个关于发生了什么以及它们在何处的视觉指示器
完整数据集
例如,如果用户点击一次并且您的应用程序页面每次点击有 10 条记录,您将显示 "Fetching records 1 through 10" 并且对于每个后续点击:取消之前的异步请求,increase/decrease记录范围(也反映在 UI 上)并提交新请求。这也应该反向工作(以防用户超出他们的目标范围)。
我的 WPF C# 程序允许用户浏览项目:当用户单击 "Next Items" 我禁用命令按钮,加载下 X 个项目,然后启用命令按钮。执行命令需要几秒钟。
现在,假设用户不耐烦并反复点击 "Next Items" 按钮(或按住相应的键)。我如何利用这一点,将其用作行为不同和 "fast forward" 项目组的提示?不显示组 N+1 和 N+2,而是例如 N+5 和 N+10,如果用户坚持,则显示 n+30 和 N+40?
我 可以 将处理委托给后台任务,保持按钮启用,并将 "click while previous command had not yet been processed" 解释为指示加快速度并将一些调用放在一起。但恐怕我让事情变得复杂了:这似乎是普遍的需求,希望有既定的解决方案。
所以,我的问题是:我如何确定用户希望我快点处理,是否有响应的普遍做法?
编辑:两个很好的答案。请原谅我,我只能标记一个作为"selected"答案,但谢谢你们!
您必须开始使用异步方法并使用取消令牌。 但是朝着它努力,不要一步完成所有事情。 首先实现异步,然后才添加取消。
互联网上有一些来自 Steven Cleary 的有趣文档可以帮助您开始使用 Async。
这样做的关键在于,由于您使用异步委托给后台线程,因此您的 GUI 始终保持响应。 当你的用户快速按下按钮并且一个很长的 运行 进程仍然很忙时,你可以通过检查取消标记来取消它,然后简单地发出一个新任务。
但是如果 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
我知道你需要获取数据 asynchronous
;我将重点介绍如何识别用户快进的愿望以及如何从 User Experience
的角度处理它。为了保持用户体验,我建议通过以下方式消除对他们想要什么的所有疑问:
- 通过将您的点击事件连接到
Mouse.MouseUp
事件,将完整的点击注册为对下一组记录的请求 - 给出一个关于发生了什么以及它们在何处的视觉指示器 完整数据集
例如,如果用户点击一次并且您的应用程序页面每次点击有 10 条记录,您将显示 "Fetching records 1 through 10" 并且对于每个后续点击:取消之前的异步请求,increase/decrease记录范围(也反映在 UI 上)并提交新请求。这也应该反向工作(以防用户超出他们的目标范围)。