我的表单中有以下WndProc处理程序.它应防止水平移动表单(仅允许垂直移动):
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (!ShowCaption && m.Msg == 0x216)
{ // Trap WM_MOVING
var rc = (RECT)Marshal.PtrToStructure(m.LParam, typeof(RECT));
int w = rc.right - rc.left;
rc.left = this.Left;
rc.right = rc.left + w;
Marshal.StructureToPtr(rc, m.LParam, false);
}
base.WndProc(ref m);
}
它可以工作,但是当用户移动表格时,CPU使用率会大大增加.在此功能中什么可能效率如此低下,并且有什么方法可以解决?
解决方法:
我尝试了您的代码,并且效果很好.它没有像您所说的那样使100%的CPU饱和,仅占用了约16%的CPU.
我想需要花费很长时间来处理表单的绘制或背景窗口的绘制(而不是wndproc实现).
尝试通过添加等待时间来限制表单每秒可以执行的重绘次数
System.Threading.Thread.Sleep(10);
在这行之后:
Marshal.StructureToPtr(rc, m.LParam, false);
拖动时睡眠10毫秒可限制您的窗体每秒重绘100次以上,同时不使用某些CPU.
编辑:忘了提及添加睡眠改变了我盒子上的〜16%至〜12%.