[英]How to set busy cursor for slow WPF controls
顯示繁忙的光標似乎有很多資源。
但是我設法找到的所有解決方案都依賴於通過視圖模型設置光標。 (即IsBusy屬性,即棄的WaitCursor)。
當我知道我的數據綁定/視圖模型何時可以長時間運行時,這些方法很好用。
但是對於瓶頸是實際WPF用戶控件本身的情況,我不知道如何自動執行此操作?
例如:
加載控件最初沒有滯后。 但是,一旦使用了第三方控件,該控件每次加載都會出現500毫秒的延遲。
綁定本身很快,因此,在視圖模型中添加waitcursor / IsBusy是沒有用的,因為它不知道控件(或其任何邏輯/可視子級)何時完成渲染。 它也不應該知道,因為視圖模型不應受到視圖實現的影響。
當一個或多個WPF控件忙/慢時,應用程序是否可以將光標自動設置為忙?
您可能需要這樣的東西,
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);
當一個或多個WPF控件忙/慢時,應用程序是否可以將光標自動設置為忙?
並不是的。 如果您的UI線程處於阻塞狀態,則您將無法更新游標,直到它仍然變為未阻塞狀態,這將無法達到目的。
綁定本身很快,因此,在視圖模型中添加waitcursor / IsBusy是沒有用的,因為它不知道控件(或其任何邏輯/可視子級)何時完成渲染。 它也不應該知道,因為視圖模型不應受到視圖實現的影響。
如果使用IDisposable
等待游標解決方案,則可以嘗試安排Dispose()
調用在下一次布局傳遞之后發生:
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Loaded,
new Action(() => waitCursor.Dispose()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.