【问题标题】:WPF Window that only shows in TaskBar仅在任务栏中显示的 WPF 窗口
【发布时间】:2011-11-12 18:25:06
【问题描述】:

我不确定我想做的是否合适,所以我会稍微解释一下。

我们有一个需要一段时间才能加载的大型应用程序。所以我们有一个启动画面。 启动画面会导致远程桌面(终端服务器)上的加载时间过长。 因此,为了缓解这种情况,我们希望在 RDP 上加载时隐藏启动画面。 但是我们仍然需要至少向用户显示应用程序正在加载。

所以,我想也许只是在任务栏(不是系统托盘)中显示一些东西,因为一旦应用程序完全加载它就会消失(并被主窗体的任务图标取代)。 然而,我看过的任何 WPF 解决方案都需要一个可见的表单/窗口来显示任务栏状态。

有没有什么方法可以在任务栏中显示某些内容而不显示 WPF 窗口?

或者是否有另一种方法可以在屏幕上不显示任何内容的情况下显示应用程序加载状态?

【问题讨论】:

  • 您使用的是SplashScreen 类吗?你能解释一下加载时间过长吗?可能是由于您的启动画面中的动画吗?你见过这个吗? blogs.msdn.com/b/jgoldb/archive/2010/02/27/…
  • 加载时间过长似乎与我们的应用程序 (WinForms) 的绘制问题有关。因为它具有大量控件,所以绘制时间更长。另外,因为它位于另一个处理 Hwnds 的框架之上。但我发现的性能问题是,当启动画面仍然可见时,应用程序的绘制时间超出了正常预期(>1 分钟)。直到闪屏被隐藏,应用程序才减少到只有 1~3 秒的绘制时间。我只能猜测两个窗口之间的 RDP 存在一些屏幕缓冲区问题。
  • 不,我没有意识到有 SplsahScreen 类。我们的启动画面没有动画。只是动态的(更新加载状态的文本),带有 WPF 效果和大 PNG。移除效果并没有缩短 RDP 的加载时间。

标签: wpf taskbar splash-screen


【解决方案1】:

我们遇到了同样的问题。

在远程桌面上,我们执行了以下步骤...

  1. 我们将启动窗口配置为不允许调整大小,并且只有最小化和关闭按钮。

  2. 我们删除了 WindowStyle=None 设置,以便出现 Splash 窗口的标题栏

  3. 我们将启动窗口的宽度和高度设为零。这样,您在屏幕上看到的只是标题栏的一个蓝色小矩形,带有文本“正在加载...请等待...”并最小化和关闭按钮。

  4. 我们也使用了 Window 的内核调用来禁用标题栏的关闭按钮。这种方式用户无法取消启动窗口。

  5. 因此,用户所能做的就是最小化任务栏或从任务栏恢复。

恢复后,他看到的只是标题栏的蓝色矩形,上面有“正在加载...”文本。通过这种方式,窗口也声称它在任务栏上的位置,但隐藏了它的启动动画,用户也知道启动屏幕正在加载。为此,您还可以通过附加更多句号来更新标题栏的文本...

正在加载。请稍等..

正在加载。请稍等...

正在加载。请稍等……

正在加载。请稍等..

【讨论】:

  • 好吧,我不能将两者都标记为答案,但 AngelWPF 和 Paul 的回答都是相关的。对于我们已经存在的 Splash Window,现在有一个备用 ShowSplash() 方法。 * 删除 ShowInTaskbar="False" * 将 Size 设置为 0, 0 * 将子控件 Size 设置为 0,0。 * 添加标题。 * 添加了一个图标。其他设置必须保留。我们已经研究了性能问题,但这与从旧应用程序转换而来的大量遗留代码相关联,该应用程序现在位于一个框架上以模拟大部分旧基础。
【解决方案2】:

我确实认为您需要调查问题的根本原因。可能正在研究线程和并行性。

但是,一个简单的解决方案就是创建一个隐藏窗口。一种是透明的,没有边界或任何东西。它甚至可以设置为 0, 0 的大小。这样你就可以得到你需要的任务栏项目。

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 2021-11-27
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多