在终端服务/citrix 环境中,我应该
Application.EnableVisualStyles()
在程序启动时调用我的 .NET 3.5 WinForms 应用程序吗?或者,最好不要这样做?
我正在寻找能够提供最佳性能的选项,并且不需要使用主题绘制的任何控件。
在终端服务/citrix 环境中,我应该
Application.EnableVisualStyles()
在程序启动时调用我的 .NET 3.5 WinForms 应用程序吗?或者,最好不要这样做?
我正在寻找能够提供最佳性能的选项,并且不需要使用主题绘制的任何控件。
视觉风格是构成操作系统主题的颜色、字体和其他视觉元素。如果控件和操作系统支持,控件将使用视觉样式进行绘制。要产生效果,必须在应用程序中创建任何控件之前调用 EnableVisualStyles();通常,EnableVisualStyles() 是 Main 函数的第一行。
因此,如果您需要让您的应用程序看起来与当前的操作系统主题一致,您需要调用它。如果经典的 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
则绝对没有效果,因此调用它与否没有区别。