长期运行状态

时间:2009-11-24 09:12:15

标签: .net user-interface oop

在您的应用程序中执行长时间操作时,如何将业务层中的信息提升到UI?

活动? 传入挂钩到UI的状态对象?

在我开始之前,我只是想知道你们和女孩们想出了什么狡猾的方式。

4 个答案:

答案 0 :(得分:1)

我通常有两种方法:

  1. 使用事件推送数据。很简单,long方法知道它完成了多少,每当它完成一个片段时它就会引发一个事件并将数据推送到UI。
  2. 轮询。假设该方法用于读取文件。它将始终使用其进度更新某个属性,并且UI将每100-200ms轮询该属性一次以更新进度。 100-200ms的原因是低于用户不会注意到的,它只会减慢操作;更高,进步将是'笨重'。

答案 1 :(得分:0)

你应该区别对待:这可以在GUI应用程序中完成,这需要批量完成。

运行5分钟的东西:你的gui-app还是批处理?

答案 2 :(得分:0)

如果我们考虑一个典型的Web应用程序 - 不使用COMET等推送技术的应用程序,浏览器将间歇性地获取更新的信息,可能是在用户请求时,也许是在进行AJAX后台调用时。

在那种情况下,我的服务提供了状态操作。

 int requestSomeWork( ... data ... ) ; // returns an id

 Status getStatus( int id );  // tell me about a previously submitted request

此样式不仅可用于显示进度信息,还可用于从故障情况中恢复。我可以提供其他方法,以便我们可以确定如果浏览器或服务器崩溃就像我们创建请求时发生了什么

 int[] findRequest( ... search Criteria ... );  // I think I submitted a request like ... what's its id?

如果我们有一个“实时”UI,胖客户端或COMET,那么我们可以添加事件处理

 void registerForUpdates( id, callMe );

答案 3 :(得分:0)

这似乎正是为什么事件设计的。让其他对象知道该对象的更改。

有一个ProgressUpdated事件报告一个进度百分比或沿线的东西是我会怎么做。