我正在尝试解决我的应用程序中的问题。我正在开发Vista中的应用程序,并且在那里运行良好,但是当我将其带到XP时,该表格就会变得缓慢而无反应。当我使用断点观看Windows消息时,我发现在XP中,该表单每秒都会反复绘制一次(即使它实际上并不需要);但是,对Vista的相同测试并未显示这种重复的绘画。

关于可能导致这一点的什么想法?

有帮助吗?

解决方案

感谢大家的投入。在颠覆的帮助下,现在已经解决了问题!窗口的呆滞性是一个相对较新的问题,因此我决定使用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_COMPOSS。

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;
    }
}

现在一切都很好!

其他提示

在没有看到特定代码等的情况下,我不知道您的特定问题,但是由于桌面窗口管理器(DWM),Vista中的窗口绘画大不相同。由于组成效果,每个窗口的图像实际上是缓存/双缓冲的,因此您不会看到重新粉刷的闪烁。

我建议您专注于解决XP上的问题,因为这显然是DWM掩盖Vista的问题。

某些东西导致部分或所有窗口变得无效。

正如@Jon所说的不多的细节,但这里有一些要寻找的东西:

  1. 您有自定义油漆逻辑吗?形容它。
  2. 您的代码中有任何计时器吗?他们在做什么?
  3. 闪烁仅在使用程序时发生,或者当您的手不在计算机上并观看时才发生?
  4. 您是否仅使用标准.NET控件或任何控件库 /用户控件?
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top