gpt4 book ai didi

c# - 为什么我的表格没有锁定?

转载 作者:太空狗 更新时间:2023-10-29 17:46:22 25 4
gpt4 key购买 nike

阅读时this answer来自另一个问题,我 100% 确定以下代码会锁定 UI 并且不会引起任何移动。

private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
this.Left += 10;
System.Threading.Thread.Sleep(75);
this.Left -= 10;
System.Threading.Thread.Sleep(75);
}
}

我和评论中的其他几个人说它行不通,但 OP 坚持认为它行得通,我们应该尝试。我最终创建了一个新的 Winforms 项目,添加了一个按钮,然后将上面的代码放入事件处理程序中以进行单击,并且表单确实摇动了。

当消息泵被此方法阻止时,窗体如何移动,OnPaint 不应在窗体或其任何子控件上调用,这是如何工作的?

最佳答案

Aero 可以做到这一点。 Windows 不再直接渲染到视频帧缓冲区,它们渲染到内存。想想“位图”。然后 DWM 进程合成这些位图并将它们传送到缓冲区。这解决了许多窗口绘画问题,最臭名昭著的问题可能是将一个窗口移到另一个窗口时留下的“痕迹”。拥有底部窗口的任何进程都必须 catch 并重新绘制显示的像素。这需要时间和可见的未绘制(paint)像素。还允许其他特殊效果,例如将鼠标悬停在任务栏按钮上时可以看到的实时缩略图,只是该位图的副本缩小以适合。而 Aero Peek,只是该位图的投影。以及 Vista 和 Win7 中的玻璃。以及 Win8 中显示 Store 应用程序的特殊“屏幕”。以及触摸屏幕时看到的可见标记。

并且也影响这段代码,窗口位置现在只是合成位图的不同位置。原始位图仍然完好无损,不需要重新绘制。

不要在 XP 上或 Aero 关闭时尝试此操作。

关于c# - 为什么我的表格没有锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25919845/

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