【问题标题】:Wait cursor stuck even after application is idle until mouse is moved即使在应用程序空闲后等待光标卡住,直到鼠标移动
【发布时间】:2012-09-24 17:44:48
【问题描述】:

(我的 WPF 代码实际上是在一个 DLL 中,并且由非 CLR 代码启动并与之交互,所以这不是标准的 WPF 应用程序。我从未在纯 WPF 应用程序中看到过这种行为,但我我不确定问题是否与此有关)

如果我的视图模型在一段时间内快速变化并且 UI 线程花费大量时间试图跟上它(我有几个转换器和一些复杂的布局必须在 VM 更改时刷新,例如,DataGrids 在添加行时调整其列的大小等),自动显示等待光标(我猜是操作系统)我在我的代码或 XAML 中没有做任何事情来更改光标。当您在 WPF 中将光标设置为 Cursors.Wait 时,它也与您获得的等待光标不同。是箭头光标,但旁边有等待圈。

我不希望这种情况发生,因为程序并没有真正“等待”。大多数事情都在后台线程中进行,UI 线程只是花费大量时间试图跟上它,但是 UI 并非没有响应。更令人讨厌的是,即使在应用程序(包括后台线程)空闲后,该光标仍保持不变 - 直到鼠标移动。鼠标一移动,它就消失了,但如果用户不移动鼠标,他可能会在不经意间认为应用程序仍然很忙,而实际上它是完全空闲的。

使用 WPF 函数设置光标的任何方式都无法覆盖此光标。

【问题讨论】:

    标签: wpf cursor


    【解决方案1】:

    终于想通了,至少在应用程序空闲时隐藏等待光标(但这只是因为我的视图模型明确知道何时发生这种情况,在更复杂的情况下,VM 可能不知道自己何时处于“空闲”状态)

    using System.Windows.Input;
    
    ...
    
    Mouse.OverrideCursor = Cursors.Arrow;
    Mouse.OverrideCursor = null;
    

    但是我仍然想首先摆脱这个等待光标,如果不离开 Mouse.OverrideCursor = Cursors.Arrow 设置,这种方法是不可能的,这意味着光标在需要时永远不会改变(就像悬停时链接到 ibeam文本框等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多