C#-WndProc处理程序效率低下

我的表单中有以下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%.

上一篇:HTML5 中已经可以用 Ajax 上传文件了,而且代码非常简单,借助 FormData 类即可发送文件数据。


下一篇:c#-MVP被动视图-将视图数据和模型数据分开