C#双缓冲诠释:
简单说就是当我们在举行绘图操纵时,体系并非直接把内容显现到屏幕上,而是先在内存中保留,然后一次性把效果输出来,假如没用双缓冲的话,你会发如今绘图过程当中屏幕会闪的很厉害,由于背景一直在革新,而假如等用户画完以后再输出就不会涌现这类状况,细致的做法,实在也就是先建立一个位图对象,然后把内容保留在里面,末了把图显现出来。
启用双缓冲
public Form1() { InitializeComponent(); // 处理窗口闪灼的题目 SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); }
延时重绘
当鼠标拖拽的时刻,重绘会异常的频仍,这里运用时候来推断,削减重绘的次数。
增加变量:
/// <summary> /// 纪录鼠标上一次挪动的时候 /// </summary> private long lastMouseMoveTime = System.DateTime.Now.Ticks;
在“UpdateCutInfoLabel”要领中增加重绘掌握:
/// <summary> /// 更新截图信息显现框,截图编辑东西框 /// </summary> private void UpdateCutInfoLabel(UpdateUIMode updateUIMode) // UpdateUIMode updateUIMode = UpdateUIMode.None { //大于300毫秒或有组件显现或隐蔽才举行重绘 long mouseMoveTimeStep = System.DateTime.Now.Ticks - lastMouseMoveTime; if (mouseMoveTimeStep < 300 && updateUIMode == UpdateUIMode.None) { return; } lastMouseMoveTime = System.DateTime.Now.Ticks; if (this.lbl_CutImage.Visible || (updateUIMode & UpdateUIMode.ShowCutImage) != UpdateUIMode.None) { this.lbl_CutImage.SetBounds(this.cutImageRect.Left, this.cutImageRect.Top, this.cutImageRect.Width, this.cutImageRect.Height, BoundsSpecified.All); if (!this.lbl_CutImage.Visible) { this.lbl_CutImage.Show(); } } }
经由测试发明,拖拽时闪灼及卡顿的征象显著改良。
以上就是C#开辟实例-订制屏幕截图东西(五)针对拖拽时闪灼卡顿的优化的细致内容,更多请关注ki4网别的相干文章!