我的WPF C#程序允许用户浏览项目:当用户单击"下一个项目"时,我禁用命令按钮,加载下一个X项目,并启用命令按钮。执行该命令需要几秒钟时间。
现在,假设用户不耐烦,并重复单击"Next Items"按钮(或按住相应的键)。我该如何利用这一点,以此为线索,以不同的方式"快进"项目组?不显示组N+1和N+2,而是显示,例如,N+5和N+10,如果用户坚持,则显示N+30和N+40?
我可以将处理委托给后台任务,保持按钮处于启用状态,并将"在上一个命令尚未处理时单击"解释为加快进度并一起批处理一些调用的指示。但恐怕我让事情复杂化了:这似乎是共同的需求,希望有既定的解决方案。
因此,我的问题是:我如何确定用户希望我加快进度,以及是否有常见的响应做法
编辑:两个很好的答案。请原谅我,我只能把一个标记为"选定"的答案,但谢谢你们两个!
您必须开始使用Async方法并使用取消令牌。但要努力做到这一点,不要一步到位。首先实现async,然后添加取消。
互联网上有一些来自Steven Cleary的有趣文档,可以帮助您开始使用Async。
这样做的目的是,由于您通过使用async委派给后台线程,因此GUI始终保持响应。当用户快速按下按钮,并且长时间运行的进程仍然繁忙时,您可以通过检查取消令牌来取消它,然后简单地发布一个新任务。
但是,如果异步对你来说是新的,你将有大量的阅读要做
http://blog.stephencleary.com/2012/02/async-and-await.htmlhttp://blog.stephencleary.com/2014/10/a-tour-of-task-part-5-wait.html
我相信您已经意识到,需要将数据提取为asynchronous
;我将重点讨论如何识别用户的快进愿望,以及如何从User Experience
的角度处理它。为了保持用户体验,我建议通过以下方式消除对他们想要什么的所有疑问:
- 通过将单击事件连接到
Mouse.MouseUp
事件,将完整的单击注册为对下一组记录的请求 - 提供一个视觉指示器,说明发生了什么以及它们在哪里完整的数据集
一个例子是,如果用户单击一次,您的应用程序页面每次单击10条记录,您将显示"Fetching records 1 to 10",对于随后的每次单击:取消以前的异步请求,增加/减少记录范围(也反映在UI上),并提交新请求。这也应该反过来(以防用户超出目标范围)。