【问题标题】:Progress bar for time consuming tasks (or queries)耗时任务(或查询)的进度条
【发布时间】:2014-06-30 18:51:26
【问题描述】:

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

所以目前,我已经实现了漩涡加载图像来向用户显示任务正在进行中。现在我的客户想要在按钮本身中显示进度条,如下所示Buttons With Built-in Progress MetersProgress Button Styles

我的想法是从服务器获取进度并更新按钮中的进度样式。在Reporting Server-Side Progress to Web Pages with SignalR 的文章的帮助下,我能够发现如何通过使用 SignalR 向客户端报告服务器上的进度

问题从现在开始。 我不知道如何衡量重置密码的任务已经完成了多少,还剩下多少

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

【问题讨论】:

    标签: jquery asp.net-mvc-4 signalr


    【解决方案1】:

    在某些时候,您必须将这个问题分解成更小的部分,而您想要将这些部分分解到多远取决于您需要此进度条的准确程度以及您能够花费多少时间或金钱解决问题。

    对您来说,重置密码有多少步骤?在我看来,这是对SetPassword (there's a good question and answer out there already on this topic) 的简单调用,老实说应该很快。在我看来,跟踪该进度的唯一可靠方法可能是在发出 SetPassword 请求之前将其反冲到 50%,然后在通话结束后完成到 100%。

    如果您有更多的步骤,只需在每个方法完成时跟踪一个百分比。如果这确实是您唯一的电话,我不确定如何可靠地跟踪单个电话的百分比,例如SetPassword(如果该电话花费的时间超过一两秒,您可能有导致性能如此差的其他一些问题)。无论如何,如果您确实有一个呼叫,您将不得不深入挖掘以跟踪进度(也许磁盘上的文件指示进一步的进度、网络带宽、内存使用情况等)。

    【讨论】:

    • 感谢您的回答!你的建议令人印象深刻。我会等着看是否有人有更好的建议。但我真的很喜欢撞柜台的建议。
    【解决方案2】:

    我在上一个客户的几个项目中做过类似的事情。

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

    IUpdateProgess 有一个方法

    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/

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

    【讨论】:

    • 很抱歉,我是 SignalR 的新手。所以我无法理解你分享的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多