【问题标题】:How to set busy cursor for slow WPF controls如何为慢速 WPF 控件设置繁忙光标
【发布时间】:2014-11-23 09:29:30
【问题描述】:

似乎有很多关于显示忙碌光标的资源。

但我设法找到的所有解决方案都依赖于通过视图模型设置光标。 (即 IsBusy 属性,一次性 WaitCursor)。

当我知道我的数据绑定/视图模型何时会长时间运行时,这些方法很有效。

但是对于瓶颈是实际 WPF 用户控件本身的情况,我不知道如何自动执行此操作?

例如:

加载控件最初是无延迟的。但是一旦使用了第 3 方控件,该控件每次加载时都会出现 500 毫秒的延迟。

绑定本身很快,因此,在视图模型中添加 waitcursor/IsBusy 是没有用的,因为它不知道控件(或其任何逻辑/可视子项)何时完成渲染。它也不应该知道,因为视图模型不应该受到视图实现的影响。

当一个或多个 WPF 控件忙/慢时,应用程序是否可以自动将光标设置为忙?

【问题讨论】:

    标签: wpf controls busy-cursor


    【解决方案1】:

    你可能需要这样的东西,

                var busytimer = new DispatcherTimer(
                TimeSpan.FromSeconds(1),
                DispatcherPriority.Normal,
                delegate
                {
                    Process application = null;
                    foreach (var process in Process.GetProcesses())
                    {
                        if (process.ProcessName == "Your process name")
                        {
                            application = process;
                            break;
                        }
                    }
    
                    if (!application.Responding)
                    {
                        this.Cursor = Cursors.Wait;
                    }
                    else
                    {
                        this.Cursor = Cursors.Arrow;
                    }
                },
                Application.Current.Dispatcher);
    

    【讨论】:

      【解决方案2】:

      当一个或多个 WPF 控件忙/慢时,应用程序是否可以自动将光标设置为忙?

      不是真的。如果您的 UI 线程被阻塞,那么您将无法更新光标,直到它被解除阻塞,这违背了目的。

      绑定本身很快,因此,在视图模型中添加 waitcursor/IsBusy 是没有用的,因为它不知道控件(或其任何逻辑/可视子项)何时完成渲染。它也不应该知道,因为视图模型不应该受到视图实现的影响。

      如果您使用 IDisposable 等待光标解决方案,您可以尝试将 Dispose() 调用安排在下一次布局传递之后发生:

      Dispatcher.CurrentDispatcher.BeginInvoke(
          DispatcherPriority.Loaded,
          new Action(() => waitCursor.Dispose()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多