1

当一个长时间运行的进程正在执行时,向用户提供反馈是一种很好的做法,例如,更新进度条。

GUI 库的一些常见问题解答建议如下:

function long_running_progress()
    do_some_work()
    update_progress_bar()
    while finish
        do_some_work()
        update_progress_bar()
    end while
end function

无论如何,我们知道将业务逻辑代码与用户界面代码分开是一种最佳实践。上面的示例是在业务逻辑函数中混合用户界面代码。

什么是在业务逻辑层中实现功能的好技术,其进度可以通过用户界面轻松跟踪而无需混合层?

欢迎任何语言或平台的答案。

4

3 回答 3

5

提供回调接口。业务逻辑每隔一段时间就会调用它的方法。用户层将更新进度或其他内容。如果你想允许取消——没问题,让回调方法有一个返回值,这将表明需要取消。无论线程数如何,这都将起作用。

于 2009-02-16T08:31:28.627 回答
1

如果您使用 MVC 范例,您可以让模型将其当前进度状态作为属性发布,控制器可以每 x 秒提取一次,然后将其放入视图中。这假设多线程,但我不确定你是否允许。

于 2009-02-16T02:33:31.437 回答
1

出版是一个很好的方法。这完全取决于平台如何完成。但是,当涉及到用户体验时,还需要考虑以下几点:

  • 如果您不知道任务执行了多长时间,请不要给用户一个进度条。还剩什么时间?半途而废是什么意思?最好使用沙漏功能(旋转轮、弹跳进度条等)。

  • 查看进度的唯一有趣的事情是时间。半途而废是什么意思?你想知道你是否有时间喝那杯咖啡。如果您显示其他内容,您可能正在显示系统编程的工作原理。大多数用户不感兴趣或只是感到困惑。

  • 长时间运行的进度应该始终支持用户转义,这是一种取消请求的方式。您不想长时间锁定用户。更好的是完全在后台处理长时间运行的请求,并在结果返回时让用户返回。

于 2009-02-16T08:26:51.477 回答