#c# #.net #winforms #citrix #terminal-services
#c# #.net #winforms #citrix #terminal-services
Вопрос:
В среде служб терминалов / citrix должен ли я вызывать Application.EnableVisualStyles()
в моем приложении .NET 3.5 WinForms при запуске моей программы? Или лучше воздержаться от этого?
Я ищу вариант, который обеспечивает наилучшую производительность, и мне не нужны никакие элементы управления, нарисованные с помощью тем.
Ответ №1:
Визуальные стили — это цвета, шрифты и другие визуальные элементы, которые формируют тему операционной системы. Элементы управления будут отображаться с использованием визуальных стилей, если элемент управления и операционная система поддерживают это. Чтобы добиться эффекта, перед созданием каких-либо элементов управления в приложении необходимо вызвать EnableVisualStyles(); обычно EnableVisualStyles() — это первая строка в основной функции.
Итак, если вам нужно, чтобы ваше приложение выглядело в соответствии с текущей темой операционной системы, вам нужно вызвать это. Если вам достаточно классического вида Windows, вы можете пропустить это. Лично я никогда не включаю визуальные стили для своих приложений, предназначенных только для сервера (например, панелей управления и т.д.).
Ниже приведен инструмент конфигуратора без включенных визуальных стилей. Это хорошо выглядит для меня таким образом, так что EnableVisualStyles
было пропущено:
Краткий обзор Application.EnableVisualStyles()
метода с reflector показан ниже кода в методе EnableVisualStyles -> EnableVisualStylesInternal -> CreateActivationContext
:
if (!contextCreationSucceeded amp;amp; 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
это абсолютно не влияет, поэтому вызывать его или нет, не имеет значения.
Комментарии:
1. Да, но на рассматриваемом сервере терминалов, вероятно, будут отключены темы операционной системы (он будет использовать «классический» вид), чтобы сэкономить ресурсы. Таким образом, мой вопрос заключается в том, вызываю ли я приложение. EnableVisualStyles () будет иметь какое-либо значение в этом параметре с точки зрения производительности. Для клиентов, запускающих приложение вне служб терминалов, я буду вызывать EnableVisualStyles().
2. Нет приложения. EnableVisualStyles () будет эффективен только в том случае, если включены тематические службы ОС и поддержка тем, поэтому вызов EnableVisualStyles или нет вообще не окажет никакого эффекта (ни с точки зрения производительности, ни с точки зрения визуальных эффектов), если темы уже отключены.