【问题标题】:Designing Multi-Tier application to use progress bar设计多层应用程序以使用进度条
【发布时间】:2010-12-13 03:27:47
【问题描述】:

我在 c# 中有一个多层应用程序,它应该在数据库上执行任务(如果第一次使用,我们可能会创建数据库并用一些数据填充它)。当我最初设计应用程序时,我没有考虑可能的进度条控件,更不用说任何形式的进度报告了。如何修改应用程序的设计以便能够向 UI 层报告数据库操作进度?有没有一种可重复使用的解决方案,并且不会强迫我修改我的所有函数以获取额外的报告输入?

【问题讨论】:

  • 祝你好运。 (报告)进展艰难

标签: c# progress-bar multi-tier


【解决方案1】:

正如格雷格所说,前面还有很多工作要做。然而,有很多方法可以解决这个问题,最适合您的方法取决于已经从客户端传递到应用程序/数据库层的上下文信息。例如,如果会话令牌或事务标识符在执行查询/事务的正常过程中从客户端传递到应用程序,或者从应用程序异步传回客户端的确认引用,那么对于那些查询/事务,进度报告是必要的,您可以让应用程序更新客户端可以查询的状态表。这可以减少所需的返工量。基本上,您需要考虑已经到位的“中间件”,看看是否可以利用其中任何一个来关联跨层的事务。

【讨论】:

    【解决方案2】:

    没有。根据您的应用程序的大小,您有很多工作要做。

    要使进度报告正常工作,您需要执行工作的代码在完成一个工作单元时引发事件。该事件需要在 UI 层处理并更新进度指示器。

    一个很好的起点是研究使用 BackgroundWorker(在 MSDN 上有一个示例 - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)。熟悉 BackgroundWorker 后,您应该能够更好地决定需要对应用程序进行哪些更改。

    【讨论】:

      【解决方案3】:

      您可以修改服务器代码,使其在服务器端更新进度信息(不更改函数签名),然后有一个单独的方法可以单独查询此信息。

      这将允许您改进对进度的支持,而不会对您对服务器的现有调用产生任何影响,只需在 UI 上添加一个新的后台线程,以便在长时间运行的任务正在进行时检查更新的进度信息。

      编辑:我想同样的方法也适用于客户端中发生的任务。不过,这里也可以使用静态进度指示器类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 2019-12-23
        • 2013-03-22
        相关资源
        最近更新 更多