【发布时间】:2021-06-08 12:04:32
【问题描述】:
我正在尝试分析 UI 线程的使用情况。是否可以查询调度员排队的物品数量?
更新:克莱门斯的回答完美无缺,但是因为我想在 UI 启动后启动它并且我只关心每秒对数据进行一次采样,所以我使用以下代码...
int queueLength = 0;
var currentDispatcher = Dispatcher.CurrentDispatcher;
currentDispatcher.Hooks.OperationPosted += (s, e) => Interlocked.Increment(ref queueLength);
currentDispatcher.Hooks.OperationCompleted += (s, e) => Interlocked.Decrement(ref queueLength);
currentDispatcher.Hooks.OperationAborted += (s, e) => Interlocked.Decrement(ref queueLength);
Observable
.Interval(TimeSpan.FromSeconds(1))
.Subscribe(x =>
{
int currentQueueLength = queueLength;
if (currentQueueLength < 0)
{
Interlocked.Add(ref queueLength, currentQueueLength * -1);
}
UiQueueLength = queueLength;
});
【问题讨论】:
标签: wpf