【问题标题】:Hourglass cursor as soon as app starts, before first window shown应用程序启动时的沙漏光标,在显示第一个窗口之前
【发布时间】:2015-07-14 02:15:25
【问题描述】:

我们的应用程序入口点目前如下(也描述了执行每个操作所需的计算时间),在 App.xaml.cs 中:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
       // 1) Lengthy config load, db reading, internal data structures creation

       // 2) [about 4 seconds later] create splashscreen (it needs some info from config before being shown)

       // 3) [1-2 more seconds here] display the main view

       // 4) base.OnStartup(e);
    }
}

这样做的问题是,在您启动程序后,用户需要 3-4 秒才能收到任何关于正在发生的事情的反馈:因此,在考虑重构我们的启动代码之前,我们曾考虑过更改鼠标光标(从箭头到沙漏)应用程序一开始。这种方法的问题在于,Mouse.OverrideCursor 等技术似乎仅在您已经拥有 WPF 窗口时才有效,而我们的第一个窗口将在几秒钟后创建。除了全局更改光标(我们已经测试过,但是这需要 P/Invoke 并弄乱注册表,在这种情况下您不想这样做),还有其他方法可以快速解决问题吗?

建议的重复肖像正确地是我的场景,但最终没有提供有效的答案。如您所见,由“Kevin DiTraglia”撰写的该主题中的最佳答案提出了我已经反复尝试过的相同内容,但无济于事。

【问题讨论】:

  • 在 Winforms 中您可以使用:Application.UseWaitCursor = true;Cursor.Current = Cursors.WaitCursor;,但在 WPF 中这似乎并不像光标链接到 Window 实例那样简单(正如您所发现的那样)。
  • @PatrickHofman 我刚刚看到你给我的回复。它正确地描绘了我的场景,但最终没有提供有效的答案。如您所见,由“Kevin DiTraglia”撰写的该主题中的最佳答案提出了我已经反复尝试过的相同内容,但无济于事。也许你可以重新打开我的问题?谢谢
  • 你有没有尝试先做base.Startup()
  • 只使用启动画面,不要不要让它等待缓慢的配置加载。
  • @PatrickHofman 是的,不幸的是无济于事。我什至尝试过完全删除它

标签: c# wpf startup


【解决方案1】:

考虑在可能的情况下更改所有同步启动方法调用异步。

【讨论】:

  • 是的,正如我告诉@HansPassant 这将解决问题,但正如主题中所述,我们正在尝试制定一个不需要我们重构现有代码的解决方案。当然,如果这真的不能做到,那将是我猜的唯一解决方案
猜你喜欢
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多