编译Any Cpu以及编译为x86时会发生这种情况.GUI的各个部分不会重新绘制,除非它被调整大小,例如,如果主窗体最大化,某些控件不会随之调整大小,而其他部分的部分不会重绘并显示之前的内容.
这适用于32位机器,包括XP和Vista,但在64位Vista(没有x64 XP进行测试)上,重绘只是不能正常工作.
任何人都有任何关于从哪里开始跟踪这个的想法?
编辑:这发生在2台独立的机器上,至少我目前使用的是NVidia的最新驱动程序.
Edit2:在我的64位计算机上运行32位XP虚拟机,该应用程序没有在VM中显示重绘问题
编辑3:这可能是驱动程序问题,但我们不知道驱动程序是否或何时解决问题.一位同事说家里的ATI卡比NVidia的问题要少,但过去几个月我一直在每月更新我的视频驱动程序而且还没有解决,所以我们不能只发布我们的产品并告诉我们的客户,有一天司机制造商可能会解决这个问题.
有没有人对要避免的事情有任何见解?我们正在编译为x86,所有组件都是x86.我似乎无法使用测试项目中的任何组件重现此问题,我还没有听到其他人在大多数组件论坛上报告这些问题,因此很可能这是我们正在做的事情.
这听起来非常像这个问题.
在Windows上调整窗口大小时,通常会得到一个链,每个窗口都会收到一条WM_SIZE
消息,然后MoveWindow()
在其子节点上调用(或类似),然后再接收一个WM_SIZE
等等.我确信.NET在幕后做同样的事情.
在x64上,Windows限制了此嵌套的深度,并且在某个点(12-15个嵌套窗口)之后,它将不再发送WM_SIZE
消息.x86上似乎不存在此限制.此限制会影响在x64版本的Windows上运行的x86和x64代码.
由于不同的x64安装会出现不同的症状,因此这让我们感到厌烦.上面的MSDN博客文章有一些可能的解决方法 - 我们最终使用辅助线程异步地执行窗口大小,这相当整齐地解决了问题.