WinCE 4.2(.net精简框架集)下的图形双缓存处理

简介:

在上位机Windows操作平台( .net 2.0框架集)下实现图形双缓存有很多办法,每种办法在上位机都有很好的效果,但是很不幸,在WinCE4.2操作系统(.net 2.0精简框架集)下这些方法要么不支持,要么效果很差(还是闪烁的厉害)。

在上位机中,一般都有这么几种办法:

1、应用程序中使用双缓冲的最简便的方法是使用 .NET Framework 为窗体和控件提供的默认双缓冲,通过将 DoubleBuffered 属性设置为True即可。

2、通过SetStyle修改控件属性。

 

 
  1. public void EnableDoubleBuffering()  
  2.  
  3. {  
  4.  
  5.    // Set the value of the double-buffering style bits to true.  
  6.    this.SetStyle(ControlStyles.DoubleBuffer |   
  7.       ControlStyles.UserPaint |   
  8.       ControlStyles.AllPaintingInWmPaint,  
  9.       true);  
  10.    this.UpdateStyles();  
  11. }  
  12.  

3、比较经典的一种如下:重载OnPaint函数


 

 
  1. protected override void OnPaint(PaintEventArgs e)  
  2.   {  
  3.  
  4.    System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height);//双缓冲技术,先将所有要画的画在该图片中,再调用GS画出该图片.  
  5.    Graphics g = Graphics.FromImage((System.Drawing.Image)b);  
  6.    //在这里画你所需要画的  
  7.  
  8.    //-------------------  
  9.    e.Graphics.DrawImage((System.Drawing.Image)b,0,0);  
  10.    g.Dispose();  
  11.  
  12.    base.OnPaint (e);     
  13.   }  
  14.  

     前两种办法在WinCE下都不支持,第三种办法是可以使用的,但效果不佳,还是有明显的闪烁现象。经过上网查资料和测试,发现在第三种办法基础上要进行如下处理,效果才非常完美。

   由于我是在Panel上绘的图,所以我派生了一个类EmbedPanel,重载了OnPaintBackground函数,并且置该函数为空。


   

 
  1. public class EmbedPanel : Panel  
  2.    {  
  3.        protected override void OnPaintBackground(PaintEventArgs paintg)  
  4.        {              
  5.            //不绘制背景  
  6.        }  
  7.    }    
  8.  
  9.    private void pb_Paint(object sender, PaintEventArgs e)  
  10.        {  
  11.            try 
  12.            {  
  13.                pb_Graphics.FillRectangle(new SolidBrush(BackColor), Rect);  //绘制背景  
  14.                //--------------------------------------------------------  
  15.  
  16.                ... ... 具体的绘图代码  
  17.  
  18.                //--------------------------------------------------------  
  19.                e.Graphics.DrawImage((System.Drawing.Image)pb_Bitmap, 0, 0);  
  20.            }  
  21.            catch (Exception err)  
  22.            {  
  23.                ShowInfo(3000, 2, err.Message, "pb_Paint");  
  24.            }  
  25.        }  

    //注:在WINCE测试时发现,在OnPaint中的写System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height)代码,程序运行不长时间便会导致WinCE死机。所以我是在类的初始化中执行该代码的。

     这样一来,就很完美的在.net精简框架集下解决了绘图闪烁问题。

 



















本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/323439,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 缓存 NoSQL
Spring Cache缓存框架
Spring Cache是Spring体系下的标准化缓存框架,支持多种缓存(如Redis、EhCache、Caffeine),可独立或组合使用。其优势包括平滑迁移、注解与编程两种使用方式,以及高度解耦和灵活管理。通过动态代理实现缓存操作,适用于不同业务场景。
248 0
|
3月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
140 0
|
6月前
|
缓存 NoSQL Java
Redis应用—8.相关的缓存框架
本文介绍了Ehcache和Guava Cache两个缓存框架及其使用方法,以及如何自定义缓存。主要内容包括:Ehcache缓存框架、Guava Cache缓存框架、自定义缓存。总结:Ehcache适合用作本地缓存或与Redis结合使用,Guava Cache则提供了更灵活的缓存管理和更高的并发性能。自定义缓存可以根据具体需求选择不同的数据结构和引用类型来实现特定的缓存策略。
353 16
Redis应用—8.相关的缓存框架
|
10月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
561 0
|
8月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
305 23
|
9月前
|
存储 缓存 自然语言处理
SCOPE:面向大语言模型长序列生成的双阶段KV缓存优化框架
KV缓存是大语言模型(LLM)处理长文本的关键性能瓶颈,现有研究多聚焦于预填充阶段优化,忽视了解码阶段的重要性。本文提出SCOPE框架,通过分离预填充与解码阶段的KV缓存策略,实现高效管理。SCOPE保留预填充阶段的关键信息,并在解码阶段引入滑动窗口等策略,确保重要特征的有效选取。实验表明,SCOPE仅用35%原始内存即可达到接近完整缓存的性能水平,显著提升了长文本生成任务的效率和准确性。
464 3
SCOPE:面向大语言模型长序列生成的双阶段KV缓存优化框架
|
9月前
|
消息中间件 开发框架 监控
NET任务调度框架Hangfire使用指南
Hangfire 是一个用于 .NET 应用程序的开源任务调度框架,支持长时间运行任务、定时任务等。通过简单的安装配置,即可将任务从主线程分离,提升应用性能。支持多种数据库,提供丰富的任务类型如立即执行、延迟执行和周期性任务,并有可视化管理界面 Hangfire Dashboard。还支持安全性配置及扩展插件,如 Hangfire.HttpJob,适合各种复杂场景下的任务调度需求。
819 1
NET任务调度框架Hangfire使用指南
|
9月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
209 5
|
10月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
167 5
|
10月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
116 4