显示忙碌光标似乎有很多资源。
但我设法找到的所有解决方案都依赖于通过视图模型设置光标。 (即IsBusy财产,一次性WaitCursor)。
当我知道数据绑定/视图模型何时会长时间运行时,这些方法很有效。
但是我不知道如何在瓶颈是实际的WPF用户控件本身的情况下自动执行此操作?
例如:
加载控件最初是无滞后的。但是一旦使用第三方控制,每次加载时控件都会出现500毫秒的延迟。
绑定本身很快,因此,在视图模型中添加waitcursor / IsBusy是没用的,因为它不知道控件(或其任何逻辑/可视子节点)何时完成渲染。它也不应该知道,因为视图模型不应该受到视图实现的影响。
当一个或多个WPF控件忙/慢时,应用程序是否可以自动将光标设置为忙?
答案 0 :(得分: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);
答案 1 :(得分:0)
当一个或多个WPF控件忙/慢时,应用程序是否可以自动将光标设置为忙?
不是真的。如果您的UI线程阻塞,您将无法更新光标,直到它被解锁,这无法实现目的。
绑定本身很快,因此,在视图模型中添加waitcursor / IsBusy是没用的,因为它不知道控件(或其任何逻辑/可视子节点)何时完成渲染。它也不应该知道,因为视图模型不应该受到视图实现的影响。
如果你使用IDisposable
等待光标解决方案,你可以尝试安排Dispose()
调用在下一个布局传递之后发生:
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Loaded,
new Action(() => waitCursor.Dispose()));