我想知道是否有一种技术或方法可以检测WPF应用程序中未使用async/await的调用。
我提出这个问题是因为我正在处理的WPF应用程序在屏幕更新时会出现卡顿和停顿,而我似乎无法追踪阻塞GUI线程的调用源。
我正在使用MVVM设计模式的VS2012和VS2013。
我想知道是否有一种技术或方法可以检测WPF应用程序中未使用async/await的调用。
我提出这个问题是因为我正在处理的WPF应用程序在屏幕更新时会出现卡顿和停顿,而我似乎无法追踪阻塞GUI线程的调用源。
我正在使用MVVM设计模式的VS2012和VS2013。
虽然这不是直接回答你的问题,但以下代码可以用于识别调度程序线程何时超负荷。该代码使用围绕DispatcherInactive事件的事件处理程序来计算调度程序线程已被阻塞(超载)多长时间:
var maxThreshold = TimeSpan.FromMilliseconds(750);
var previous = DateTime.Now;
Application.Current.MainWindow
.Dispatcher.Hooks.DispatcherInactive += (sender, eventArgs) =>
{
var current = DateTime.Now;
var delta = current - previous;
previous = current;
if (delta > maxThreshold)
{
Debug.WriteLine("UI Freeze = {0} ms", delta.TotalMilliseconds);
}
};
#if DEBUG
块中。你不希望它在生产环境中运行。Dispatcher.Hooks.OperationPosted += Hooks_OperationPosted;
Dispatcher.Hooks.OperationStarted += Hooks_OperationStarted;
Dispatcher.Hooks.OperationAborted += Hooks_OperationAborted;
if (Thread.CurrentThread == Dispatcher.CurrentDispatcher.Thread)
{
//UI Thread
}