2009-08-15 2 views
0

Я пытаюсь решить проблему в своем приложении. Я разрабатываю приложение в Vista, и он отлично работает там, но когда я беру его в XP, форма становится вялой и не реагирующей. Когда я смотрю сообщения Windows, используя точки останова, я нахожу, что в XP форма неоднократно нарисована примерно раз в секунду (хотя это и не нужно); однако тот же тест на Vista не показывает эту повторяющуюся картину.Windows Form Paints Неоднократно в XP, но не в Vista

Любые идеи относительно того, что может быть причиной этого?

ответ

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 не было. Таким образом, решение должно было применять WS_EX_COMPOSITED только в Vista или более поздней версии.

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

Не видя конкретного кода и т. Д. Я понятия не имею о вашей конкретной проблеме, однако картина окон в Vista сильно отличается из-за диспетчера окон рабочего стола (DWM). Изображение каждого окна фактически кэшируется/дублируется буфером из-за эффекта композиции, и поэтому вы не увидите мерцание перекраски.

Я предлагаю вам сосредоточиться на решении проблемы на XP, поскольку это, очевидно, проблема, которую DWM маскирует на Vista.

1

Что-то заставляет часть или все ваши окна стать недействительными.

Как сказал @ Джон не так много деталей, но вот некоторые вещи, чтобы искать:

  1. У вас есть пользовательские краски логики? Опишите это.
  2. Есть ли в вашем коде таймеры? Что они делают?
  3. Выполняется ли мерцание только тогда, когда программа используется, а также когда ваши руки находятся вне компьютера и просто смотрят?
  4. Вы используете только стандартные элементы управления .Net или любые библиотеки управления/пользовательские элементы управления?

 Смежные вопросы

  • Нет связанных вопросов^_^