长时间运行状态
回答
有两种方法,我通常这样做:
- 与事件推数据。很简单,长方法知道它做了多少,每当它完成一块它引发一个事件,并推动数据到用户界面。
- 轮询。假设该方法用于读取文件。它会随时更新某个属性,并且UI将每100-200ms轮询一次该属性以更新进度。 100-200ms的原因是低于用户不会注意到的,只会减慢操作速度;更高,并且进展会'笨重'。
我发现投票也非常有效。大部分事件都可以正常工作,但是如果必须同步线程,它们会减慢运行的代码速度,所以请谨慎使用事件,仅在外部/更大的循环中使用。 – invert 2009-11-24 14:54:46
只有在事件发生得太快的情况下,投票才是好事,我想。请注意,事件不必减慢代码,因为它们可以在自己的线程中引发,并且如果去UI应该使用BeginInvoke而不是Invoke() – configurator 2009-12-02 12:01:59
你应该区别:这可以在GUI-app中完成,这需要批量完成。
运行5分钟的东西:在您的gui-app或批处理中?
这将是一个应用程序与GUI和商业层做的工作 – 2009-11-24 09:21:50
好的,非常好。但是我想说的是:如果你认为这个过程运行时间太长,那么批量完成所有工作可能会更好。 – Natrium 2009-11-24 10:56:24
谢谢但不是,这是一个关于向用户提供反馈的问题,具体不使用批处理 – 2009-11-24 11:41:52
如果我们考虑一个典型的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?
如果我们有一个“活”的用户界面,无论是胖客户端或彗星那么我们可以添加事件处理
void registerForUpdates(id, callMe);
这似乎正是事件的设计。让其他对象知道对该对象的更改。
有一个ProgressUpdated事件报告进度百分比或者沿线的事情是我该怎么做。
ok,那么如何通过方法传递引发事件的对象,如IncrementStatus()。这样你可以有一个对象,你可以再次使用不同的对象进行不同的操作,并让UI连接到它? – 2009-11-24 10:23:46
- 1. 长时间运行Ajax请求阻止短Ajax状态更新
- 2. 弹簧状态机 - 管理长时间运行的进程
- 3. 如何获得长时间运行的报告当前状态?
- 4. 使用jQuery将会话保持长时间运行状态
- 5. .NET中长时间运行的有状态服务
- 6. 导致竞争状态的长时间运行方法
- 7. 针对长时间运行任务的Grails状态更新
- 8. django中长时间运行进程的全局状态
- 9. asp.net长时间运行的任务和检查它的状态
- 10. 从长时间运行的会话bean方法返回状态
- 11. 在无状态EJB方法中使用Timer来超时长时间运行
- 12. 使用Google Dataflow的长时间状态
- 13. git状态需要很长时间
- 14. 运行长时间运行的服务
- 15. 长时间运行程序
- 16. 长时间运行Flash Player
- 17. 长时间运行合并
- 18. 长时间运行WCF Singleton
- 19. WCF Azure长时间运行
- 20. 取消长时间运行
- 21. 长时间运行查询
- 22. 长时间运行SP
- 23. SQL运行时间太长
- 24. mpirun运行时间太长
- 25. Mongodb长时间运行时间戳
- 26. Android:模拟长时间运行时间
- 27. ASP.NET在长时间运行的线程上检查线程状态?
- 28. Update-AzureRmVmss:长时间运行的操作失败,状态为'失败'。 ErrorCode:VMExtensionProvisioningError
- 29. NHibernate会话(和无状态会话)和长时间运行的应用程序
- 30. 开始长时间运行的后台进程并检查状态
而嵌套操作又如何呢?调用一个主函数调用多个子函数,每个函数提供进度并可以自己调用。 – 2009-11-24 09:44:46
我已经写了一些代码在这里,你可以在这里找到它http://www.antix.co.uk/A-Developers-Blog/Long-Operation-Status – 2009-11-27 10:05:17