首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于耗时任务(或查询)的进度条

用于耗时任务(或查询)的进度条
EN

Stack Overflow用户
提问于 2014-06-30 02:11:18
回答 2查看 248关注 0票数 2

我正在开发MVC4网络应用程序。此应用程序允许用户与AD交互。用户可以使用相同的密码重置他们的密码。然而,整个任务消耗了大量的时间。

因此,目前,我已经实现了漩涡加载图像来显示用户正在执行的任务。现在,我的客户想在按钮本身中显示进度条,如这里所示,带有内置进度表的按钮进度按钮样式

,我的想法是从服务器获取进度,并在按钮中更新进度样式。我能够了解如何在SignalR的帮助下通过用SignalR向网页报告服务器端进度向客户端报告服务器上的进度。

问题现在开始了,,我无法了解如何度量已经完成了多少重置密码的任务,以及还剩下了多少。

那么,你认为这类解决方案真的可行吗?如果是,请与我分享任何想法或建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-30 02:58:26

在某种程度上,你必须把这个问题分解成更小的部分,而你想要分解这些问题的程度取决于你需要这个进度条有多精确,以及你能在这个问题上花费多少时间或金钱。

对你来说,重置密码有几个步骤?在我看来,这是对SetPassword (在这个话题上已经有了一个很好的问题和答案)的简单调用,老实说,这应该是相当快的。跟踪我眼中的进展的唯一可靠方法可能是在启动SetPassword请求之前将计数器撞到50%,然后在调用结束后完成100%。

如果有更多的步骤,只需在每个方法完成时跟踪一个百分比。如果这确实是您唯一的调用,我不知道如何可靠地跟踪单个调用的百分比,如SetPassword (如果调用花费超过一两秒钟,您可能会遇到其他问题,导致性能如此差)。无论如何,在只有一个调用的情况下,您必须深入挖掘以跟踪进度(可能磁盘上的文件表示进一步的进度、网络带宽、内存使用等)。

票数 0
EN

Stack Overflow用户

发布于 2014-06-30 10:45:32

在我最后一个客户的一些项目中,我做了一些类似的事情。

我创建了一个小助手类来处理实际的线程处理。它为我们的IoC (Ninject)调用一个子容器。在该子上下文中,我注册了一个具有线程作用域生存期的IUpdateProgess接口。这样,下面调用的任何类都将得到相同的IUpdateProgess,但只对这个特定的线程(这将不适用于async ),因此请记住,对于后台任务来说不应该是一个问题。通过这种方式,您可以从链中的任何类注入和更新当前后台工作的进度。(顺便说一句,使用ASP.NET后台工作人员,以便在询问工作人员是否可以之前,IIS不会回收应用程序域)。

IUpdateProgess有一个方法

代码语言:javascript
代码运行次数:0
运行
复制
void Update(double progress); //Ranges from 0 - 1

当该方法被触发时,IUpdateProgess的具体实现将在后端总线上触发一条消息。然后,我使用我的一个名为SignalR.EventAggregatorProxy的小库将这些消息转发给所有侦听特定工作类型的客户端(在您的示例中,我猜只有一个用户应该得到它)。

您可以在这里查看库,https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

我写了一篇关于它的博文,http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/

这个解决方案是抽象和解耦的,任何人都可以订阅进度、后端域或前端客户端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24482127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档