簡體   English   中英

如何為WPF慢速控件設置忙光標

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM