gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:32:01 27 4
gpt4 key购买 nike

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

我想需要很长时间来处理的是窗体的绘制,或者背景窗口的绘制(而不是 wndproc 实现)。

尝试通过添加等待来限制表单每秒可以重绘的次数

System.Threading.Thread.Sleep(10);

在这一行之后:

Marshal.StructureToPtr(rc, m.LParam, false);

拖动时休眠 10 毫秒限制您的表单每秒重绘超过 100 次,同时让一些 CPU 未被使用...

编辑:忘记提及添加 sleep 将我盒子上的 ~16% 更改为 ~12%。

关于c# - WndProc 处理程序效率低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com