本文來告訴大家如何使用簡單的代碼判斷當前的軟體的 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/

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可,歡迎轉載、使用、重新發布,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布,如有任何疑問,請與我[聯系](mailto:[email protected]),
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/297250.html
標籤:WPF
下一篇:ASP.NET管道處理模型(二)
