{"record":{"id":"cc218eda9df1cec8","repo":"dotnet/wpf","slug":"value-renderoptions","errorCode":null,"errorMessage":"value","messagePattern":"value","errorType":"validation","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Media/RenderOptions.cs","lineNumber":243,"sourceCode":"        /// <remarks>\n        ///     This property specifies a preference, it does not necessarily change the actual\n        ///     rendering mode.  Among other things, this can be trumped by the registry settings.\n        ///     <para/>\n        ///     Callers must have UIPermission(UIPermissionWindow.AllWindows) to set this property.\n        /// </remarks>\n        public static RenderMode ProcessRenderMode\n        {\n            get\n            {\n                return UnsafeNativeMethods.MilCoreApi.RenderOptions_IsSoftwareRenderingForcedForProcess() ?\n                    RenderMode.SoftwareOnly : RenderMode.Default;\n            }\n\n            set\n            {\n                if (value != RenderMode.Default && value != RenderMode.SoftwareOnly)\n                {\n                    throw new System.ComponentModel.InvalidEnumArgumentException(\"value\", (int)value, typeof(RenderMode));\n                }\n                \n                UnsafeNativeMethods.MilCoreApi.RenderOptions_ForceSoftwareRenderingModeForProcess(\n                    value == RenderMode.SoftwareOnly\n                    );\n            }\n        }\n    }\n}\n","sourceCodeStart":225,"sourceCodeEnd":253,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Media/RenderOptions.cs#L225-L253","documentation":"RenderOptions.ProcessRenderMode (static) setter only accepts RenderMode.Default or RenderMode.SoftwareOnly; any other RenderMode value throws InvalidEnumArgumentException naming the parameter 'value'. This forces process-wide software rendering; hardware/other enum values are not valid here. Note HardwareOnly/other values are rejected even if they exist in the enum surface.","triggerScenarios":"Setting RenderOptions.ProcessRenderMode = RenderMode.HardwareOnly (or casting arbitrary ints into RenderMode) — only Default and SoftwareOnly pass the guard.","commonSituations":"Developers trying to force hardware rendering process-wide expecting HardwareOnly to work; config-driven code that reads a RenderMode from settings where an unexpected value slips through.","solutions":["Use only RenderMode.Default or RenderMode.SoftwareOnly for ProcessRenderMode; for per-element control use RenderOptions.SetRenderMode(element, RenderMode.SoftwareOnly)","Validate/clamp config values to the allowed set before assigning","Cast safely: only map known ints (0=Default, 1=SoftwareOnly) into RenderMode","To troubleshoot rendering, prefer disabling hardware acceleration via app config/registry (RenderTier checks) rather than invalid enum values"],"exampleFix":"// before\nRenderOptions.ProcessRenderMode = RenderMode.HardwareOnly; // throws\n// after\nRenderOptions.ProcessRenderMode = RenderMode.Default; // allow hardware; use SoftwareOnly to force software","handlingStrategy":"validation","validationCode":"bool IsValidProcessRenderMode(RenderMode m) => m == RenderMode.Default || m == RenderMode.SoftwareOnly;\nif (!IsValidProcessRenderMode(mode)) mode = RenderMode.Default;","typeGuard":"bool IsAllowedRenderMode(object v) => v is RenderMode m && (m == RenderMode.Default || m == RenderMode.SoftwareOnly);","tryCatchPattern":"try { RenderOptions.ProcessRenderMode = mode; }\ncatch (InvalidEnumArgumentException ex) { log(ex); RenderOptions.ProcessRenderMode = RenderMode.Default; }","preventionTips":["Never assign RenderMode values other than Default/SoftwareOnly to ProcessRenderMode","Validate config-driven RenderMode values against the allowed set","Use per-element RenderOptions.SetRenderMode for targeted software rendering","Cast ints to RenderMode only from known constants"],"tags":["wpf","rendering","enum","argument"],"backgroundTag":"invalid-enum-value","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}