【问题标题】:progress bar in separate window单独窗口中的进度条
【发布时间】:2023-03-26 01:43:01
【问题描述】:

(WPF) 我们被要求构建一个在应用程序繁忙时弹出的小窗口(代替等待光标或除了等待光标之外)。我们在窗口中放置一个文本块,以及一个 IsIndeterminate = true 的 ProgressBar。

我们在小窗口上调用show,然后启动我们长时间运行的进程,当我们完成时在小窗口上调用Close。但是,在长时间运行过程中,ProgressBar 并没有显示任何活动,并且小窗口在其标题中显示(Not Responding)。

这甚至可能吗?更好的主意?

【问题讨论】:

    标签: c# wpf .net-3.5


    【解决方案1】:

    您需要考虑使用另一个线程(或多个线程)来执行可能需要超过 100 毫秒的繁重处理(100 毫秒及以上可能会在“未响应”出现之前导致此“挂起”出现。)

    您可以使用BackgroundWorker 创建一个新线程 对象并订阅 OnProgressChanged 事件以指示进度条更新。然而,这并不能解决访问主(UI)线程进度条的问题。您必须检查是否需要 Invoke,然后调用一段负责更新进度条的代码。

    这是一个 StackOverflow 问题,在接受的答案中显示了一个不错的扩展方法,用于在控件上调用方法:

    Invoking

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      问题很可能是导致应用程序“忙碌”的任何东西都在应用程序的主线程中运行。因此,应用程序停止响应,包括响应来自操作系统的布局和绘画请求。因此,当应用程序“忙”时,它太忙而无法绘制新窗口。

      解决方案是将尽可能多的“繁重工作”转移到后台线程中,以便主线程和 UI 保持响应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 2013-07-23
        相关资源
        最近更新 更多