天天看點

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 線程太忙

部落格園部落格隻做備份,部落格釋出就不再更新,如果想看最新部落格,請到 https://blog.lindexi.com/

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

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。歡迎轉載、使用、重新釋出,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含連結:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我[聯系](mailto:[email protected])。