【问题标题】:Handling repetitive input from the user处理来自用户的重复输入
【发布时间】:2015-06-03 11:16:46
【问题描述】:

我的 WPF C# 程序允许用户浏览项目:当用户单击“下一个项目”时,我禁用命令按钮,加载下一个 X 项目,并启用命令按钮。执行命令需要几秒钟。

现在,假设用户不耐烦并反复单击“下一项”按钮(或按住相应的键)。我该如何利用这一点,以此为线索来表现不同和“快进”项目组?显示的不是组 N+1 和 N+2,而是例如 N+5 和 N+10,如果用户坚持,则显示 n+30 和 N+40?

可以将处理委派给后台任务,使按钮保持启用状态,并将“在上一个命令尚未处理时单击”解释为指示快点把一些调用一起批处理。但恐怕我把事情复杂化了:这似乎是普遍的需求,希望有既定的解决方案。

所以,我的问题是:我如何确定用户希望我快点做事,有没有常见的回应方式?

编辑:两个很好的答案。请原谅,我只能将一个标记为“已选择”答案,谢谢你们!

【问题讨论】:

    标签: c# wpf user-interface async-await user-input


    【解决方案1】:

    我是你已经知道你需要获取数据为asynchronous;我将专注于您将如何识别用户快进的愿望以及如何从User Experience 的角度处理它。为了保持用户体验,我建议通过以下方式消除对他们想要什么的所有疑问:

    1. 通过将点击事件连接到 Mouse.MouseUp 事件,将完整点击注册为对下一组记录的请求
    2. 提供视觉指示,说明发生了什么以及它们在其中的位置 完整的数据集

    例如,如果用户单击一次并且您的应用程序页面 @ 每次单击 10 条记录,您将显示“正在获取记录 1 到 10”,并且对于随后的每次单击:取消先前的异步请求,增加/减少记录范围(也反映在 UI 上)并提交新请求。这也应该反过来工作(以防用户超出他们的目标范围)。

    【讨论】:

      【解决方案2】:

      您必须开始使用异步方法并使用取消令牌。 但是朝着它努力,不要一步完成所有事情。 首先实现异步,然后才添加取消。

      互联网上有一些来自 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

      【讨论】:

        猜你喜欢
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-11
        • 2012-03-05
        • 2019-07-27
        • 2020-11-09
        • 1970-01-01
        • 2021-11-27
        相关资源
        最近更新 更多