使用WPF,是否有一种方法来检测阻止GUI更新的方法调用?

Con*_*ngo 3 wpf xaml asynchronous mvvm-light async-await

我想知道是否有一些技术或方法来检测WPF应用程序中没有使用async/await的调用.

我问的原因是我正在处理的WPF应用程序在屏幕更新上是口吃和停顿,我似乎无法追踪阻止GUI线程的调用的来源.

我正在使用VS2012和VS2013与MVVM设计模式.

Awk*_*der 6

这不会直接回答您的问题,但这将有助于识别调度程序线程何时重载,以下代码使用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);
            }
         };
Run Code Online (Sandbox Code Playgroud)

我建议这只用于调试模式,所以它将被包装在一个#if DEBUG块中.你不希望它在生产中运行.