美文网首页
WPF中UI线程频繁操作造成卡顿的处理(二)

WPF中UI线程频繁操作造成卡顿的处理(二)

作者: hhp895 | 来源:发表于2017-07-17 16:15 被阅读0次

转载请注明原作者

目录

WPF中UI线程频繁操作造成卡顿的处理(一)
WPF中UI线程频繁操作造成卡顿的处理(二)

做法三

做法背景

为了避免窗口UI操作卡顿,在Windows Form开发年代,微软就提出一个解决方案,在处理UI刷新时,使用Application.DoEvents()立即更新界面。参考msdn链接https://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.doevents.aspx

预备知识

(1)在WPF中如何改造实现DoEvents()方法。动态绘制心电图,参考链接:https://social.msdn.microsoft.com/Forums/zh-CN/febcee07-dc8b-44b4-8c0a-246daffdbe2b/wpf-?forum=wpfzhchs
(2)网上早有大师对该种做法进行了深度分析——《从Dispatcher.PushFrame()说起》http://www.cnblogs.com/loveis715/archive/2012/01/11/2319976.html

分析

实际上都是通过DoEvents()方法立即实现UI的重绘,而不是等所有图片加载完毕一次性显示,那样UI界面就卡住了。
代码:

        int i;
        List<String> strings;
        ObservableCollection<String> strs = new ObservableCollection<string>();
        private void Btn_Click(object sender, RoutedEventArgs e)
        {
            strings = loadDir(@"G:\BaiduYunDownload\风景图片壁纸\风景图片壁纸100张");
            strs.Clear();
         
            lb.ItemsSource = strs;
          
            for (int j = 0; j < strings.Count; j++)
            {
                strs.Add(strings[j]);
                DoEvents();
            }
        }
        public void DoEvents()
        {
            DispatcherFrame frame = new DispatcherFrame();
            Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
                new DispatcherOperationCallback(ExitFrames), frame);
            Dispatcher.PushFrame(frame);
        }

        public object ExitFrames(object f)
        {
            ((DispatcherFrame)f).Continue = false;

            return null;
        }

效果

效果与做法二一样。

目录

WPF中UI线程频繁操作造成卡顿的处理(一)
WPF中UI线程频繁操作造成卡顿的处理(二)

相关文章

  • WPF中UI线程频繁操作造成卡顿的处理(一)

    转载请注明原作者 目录 WPF中UI线程频繁操作造成卡顿的处理(一)WPF中UI线程频繁操作造成卡顿的处理(二) ...

  • WPF中UI线程频繁操作造成卡顿的处理(二)

    转载请注明原作者 目录 WPF中UI线程频繁操作造成卡顿的处理(一)WPF中UI线程频繁操作造成卡顿的处理(二) ...

  • Ui卡顿及内存管理

    UI 卡顿原因分析 1 人为在UI线程中做轻微耗时操作,导致UI线程卡顿。 2 布局Layout 过于复杂,无法在...

  • iOS多线程之GCD的使用

    在iOS开发中,所有的UI操作都是在主线程中进行的,那么如果将把耗时操作也放在主线程中,就会造成页面卡顿的现象。因...

  • Android 应用卡顿的常见原因以及Vsync原理

    应用UI卡顿常见原因主要在以下几个方面: 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿; 2.布局Layo...

  • 卡顿监控

    卡顿 3.卡顿监控 卡顿:卡顿阀值设置为主线程执行消息队列中的消息时间超过200ms认为主线程卡顿频繁GC操作也会...

  • 闲聊Android中的Handler机制

    前言 我们经常使用的Handler就是用来更新UI,我们知道,主线程不能执行耗时操作,这样会造成UI卡顿,所以需要...

  • UI卡顿现象

    UI卡顿原因 人为在UI线程做轻微的耗时操作,导致UI线程卡顿 layout布局过于复杂,无法在16ms完成渲染 ...

  • # iOS线程保活(常驻线程)

    介绍 在日常的iOS开发中,遇到卡顿也是在所难免,一般卡顿是由于主线程处理耗时长的操作而造成线程一直在阻塞,那么我...

  • BlockCanary UI卡顿优化框架源码解析

    一、UI卡顿监测原理 尽量保证每次在16ms内处理完所有的CPU和GPU计算、绘制、渲染等操作,否则会造成丢帧卡顿...

网友评论

      本文标题:WPF中UI线程频繁操作造成卡顿的处理(二)

      本文链接:https://www.haomeiwen.com/subject/wxfqkxtx.html