我正在尝试解决我的应用程序中的问题。我正在开发Vista中的应用程序,它在那里工作正常,但当我把它带到XP时,表单变得迟钝和反应迟钝。当我使用断点观察窗口消息时,我发现在XP中,窗体每秒重复绘制一次(即使它并不真正需要);然而,Vista上的相同测试并没有显示出这种重复的绘画。
关于可能导致这种情况的任何想法?
答案 0 :(得分:3)
感谢大家的投入。在Subversion的帮助下,问题现在已经解决了!窗口的迟缓是一个相对较新的问题,因此我决定使用Subversion回顾我的源代码并发现我最近在表单中应用了WS_EX_COMPOSITED样式标志以减少Vista中的闪烁。
protected override CreateParams CreateParams
{
get
{
CreateParams result = base.CreateParams;
result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
return result;
}
}
当我评论它时,表格在XP中再次响应并且重复的WM_PAINT消息消失了。因此,解决方案是仅在Vista或更高版本中应用WS_EX_COMPOSITED。
protected override CreateParams CreateParams
{
get
{
CreateParams result = base.CreateParams;
if (Environment.OSVersion.Platform == PlatformID.Win32NT
&& Environment.OSVersion.Version.Major >= 6)
{
result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
}
return result;
}
}
现在一切都很棒!
答案 1 :(得分:1)
没有看到具体的代码等我不知道你的具体问题,但是由于桌面窗口管理器(DWM),Vista中的窗口绘画差别很大。由于合成效果,每个窗口的图像实际上都是缓存/双缓冲的,因此您不会看到重新绘制的闪烁。
我建议您专注于解决XP上的问题,因为这显然是DWM在Vista上屏蔽的问题,。
答案 2 :(得分:1)
导致部分或全部窗口失效的原因。
由于@Jon没有说太多细节,但这里有一些事情需要寻找: