Должен ли я вызывать Application.EnableVisualStyles() для терминальных служб?

В терминальных службах/среде citrix следует ли вызывать Application.EnableVisualStyles() в моем приложении .NET 3.5 WinForms при запуске моей программы? Или лучше воздержаться от этого?

Я ищу вариант, который дает наилучшую производительность и не требует никаких элементов управления, нарисованных темами.


person Eyvind    schedule 15.05.2011    source источник


Ответы (1)


Визуальные стили — это цвета, шрифты и другие визуальные элементы, формирующие тему операционной системы. Элементы управления будут отображаться с визуальными стилями, если элемент управления и операционная система поддерживают это. Чтобы добиться эффекта, метод EnableVisualStyles() необходимо вызывать перед созданием каких-либо элементов управления в приложении; обычно EnableVisualStyles() является первой строкой в ​​функции Main.

Итак, если вам нужно, чтобы ваше приложение выглядело в соответствии с текущей темой ОС, вам нужно вызвать this. Если вам достаточно классического вида Windows, вы можете пропустить это. Лично я никогда не включаю визуальные стили для своих серверных приложений (таких как панели управления и т. д.).

Ниже показан инструмент конфигуратора без включенных визуальных стилей. Меня это хорошо ищет, поэтому EnableVisualStyles было пропущено:

введите здесь описание изображения

Краткий обзор метода Application.EnableVisualStyles() с отражателем показан ниже в коде метода EnableVisualStyles -> EnableVisualStylesInternal -> CreateActivationContext:

if (!contextCreationSucceeded && OSFeature.Feature.IsPresent(OSFeature.Themes))
    {
      enableThemingActivationContext = new ACTCTX();
      enableThemingActivationContext.cbSize = Marshal.SizeOf(typeof(ACTCTX));
      enableThemingActivationContext.lpSource = dllPath;
      enableThemingActivationContext.lpResourceName = (IntPtr) nativeResourceManifestID;
      enableThemingActivationContext.dwFlags = 8;
      hActCtx = CreateActCtx(ref enableThemingActivationContext);
      contextCreationSucceeded = hActCtx != new IntPtr(-1);
    }

Если OSFeature.Feature.IsPresent(OSFeature.Themes) возвращает false, EnableVisualStyles не имеет абсолютно никакого эффекта, поэтому вызов его или нет не имеет значения.

person Teoman Soygul    schedule 15.05.2011
comment
Да, но на рассматриваемом терминальном сервере, вероятно, будут отключены темы ОС (он будет использовать классический вид) в целях экономии ресурсов. Таким образом, мой вопрос заключается в том, будет ли вызов Application.EnableVisualStyles() иметь какое-либо значение в этом параметре с точки зрения производительности. Для клиентов, запускающих приложение вне терминальных служб, я буду вызывать EnableVisualStyles(). - person Eyvind; 15.05.2011
comment
No Application.EnableVisualStyles() будет эффективен только в том случае, если службы тем ОС и поддержка тем включены, поэтому вызов EnableVisualStyles или нет вообще не будет иметь никакого эффекта (ни с точки зрения производительности, ни с визуальными эффектами), если темы уже отключены. - person Teoman Soygul; 15.05.2011