0

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

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

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

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

例如:

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

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

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

4

2 回答 2

0

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

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

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

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

Dispatcher.CurrentDispatcher.BeginInvoke(
    DispatcherPriority.Loaded,
    new Action(() => waitCursor.Dispose()));
于 2014-09-29T15:28:24.050 回答
0

你可能需要这样的东西,

            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);
于 2014-09-29T06:26:38.037 回答