【问题标题】:C# ProgressBar design patternC# ProgressBar 设计模式
【发布时间】:2010-12-19 19:54:24
【问题描述】:

我正在开发一个数据库升级器应用程序。升级程序更新数据库的架构(通过执行 SQL 语句添加新列、重命名列、添加新表、新视图到现有数据库)。当用户想要从版本 1.0 升级到 2.0 时,“升级器”对象从对象工厂中获取,并调用每个“升级器”的“执行”方法。应用程序的 GUI 有一个进度条,每次升级程序对象执行 SQL 语句时,进度条都会增加。

            while (!version.Equal(CurrentVersion))
            {

                 IUpgrader myUpgrader = UpgraderFactory.GetUpgrader(version);

                 myUpgrader.Execute(UpgradedFile,progressbar);

                 version.Increment();
            }

我的问题很简单:升级对象应该如何与进度条通信。在上面的代码中,升级器对象可以直接访问进度条,但我想知道是否存在更好的方法或更好的设计模式。

问候, 赛博

【问题讨论】:

    标签: c# design-patterns progress-bar


    【解决方案1】:

    我可能会组装一个用于进度条操作的界面(C# 示例):

    interface IProgressBar
    {
         int MinValue { get; set; }
         int MaxValue { get; set; }
         int Value { get; set; }
    }
    

    然后我会让 Upgrader 对象采用该接口类型的参数。最后,我将创建一个实现该接口的类,该类还包含对进度条组件的引用,该组件用于可视化进度。

    这样您就不会在升级程序和可视化进度之间存在紧密耦合。

    【讨论】:

      【解决方案2】:

      为了实现,我将向 IUpgrader 添加一个 ProgessEvent,它是从升级程序提供的。 gui 可以向该事件添加事件监听器并相应地更新进度条。

      许多应用程序都在作弊。他们使用计时器来推进进度条,让忙碌的应用程序仍然处于活动状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 2011-12-19
        • 2016-12-12
        相关资源
        最近更新 更多