WPF 簡單判斷主線程界面是否卡頓的方法


本文來告訴大家如何使用簡單的代碼判斷當前的軟件的 UI 線程或界面是否卡頓

在后台線程調用如下代碼即可用來判斷是否卡頓

        private static async Task<bool> CheckDispatcherHangAsync(Dispatcher dispatcher)
        {
            var taskCompletionSource = new TaskCompletionSource<bool>();
            _ = dispatcher.InvokeAsync(() => taskCompletionSource.TrySetResult(true));
            await Task.WhenAny(taskCompletionSource.Task, Task.Delay(TimeSpan.FromSeconds(2)));
            // 如果任務還沒完成,就是界面卡了
            return taskCompletionSource.Task.IsCompleted is false;
        }

以上代碼的 Dispatcher 可以從窗口里面獲取,也可以使用 Application.Current.Dispatcher 獲取。以上代碼推薦在后台線程調用

原理就是給 UI 線程一個任務,如果此任務可以在 2 秒執行完成,那么就證明 UI 不卡,否則就是證明 UI 卡了

以上方法可以放在后台線程的循環進行不斷調用,但是多次調用之間需要等待一下,不然將會讓 UI 線程太忙


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM