如何在wpf中禁用硬件加速?

Ste*_*fan 15 wpf hardware-acceleration

在WPF中禁用硬件加速的步骤是什么?究竟是什么?它是一个Windows设置,一个视觉工作室设置还是你在wpf项目代码中改变的东西?它只会影响您正在运行的程序还是会影响整个系统?

Kon*_*rin 37

您可以在Window从.Net 3.5 SP1开始的级别上禁用它.

public partial class MyWindow : Window
{
    public MyWindow()
        : base()
    {
        InitializeComponent();
    }

    protected override void OnSourceInitialized(EventArgs e)
    {
        var hwndSource = PresentationSource.FromVisual(this) as HwndSource;

        if (hwndSource != null)
            hwndSource.CompositionTarget.RenderMode = RenderMode.SoftwareOnly;

        base.OnSourceInitialized(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者您可以订阅SourceInitialized窗口事件并执行相同操作.

或者,您可以在Process级别设置它:

RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
Run Code Online (Sandbox Code Playgroud)

软件渲染的优先顺序是:

  1. DisableHWAcceleration注册表项
  2. ProcessRenderMode
  3. RenderMode(每个目标)


ito*_*son 24

这是一个机器范围的注册表设置.请参阅WPF文档中的图形呈现注册表设置以获取注册表项以及与自定义WPF呈现相关的其他详细信息.

列出的关键是: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration

对于.NET 4.5,MSDN文档"不可用",因此这可能是仅在4.0或更低版本中工作的已删除选项.

  • 这应该被接受为正确的答案 (2认同)
  • 最好只为您的应用禁用它。查看康斯坦丁的其他答案 (2认同)

flo*_*ele 16

在4.0版中,您还可以使用RenderOptions.ProcessRenderMode设置进程范围的首选项(http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx).


t0m*_*13b -9

这是系统范围的设置,从桌面右键单击弹出菜单,单击属性,然后在其中查找视频设置以禁用硬件加速,或者可能有一个用于图形设置的系统托盘图标。这是系统范围的而不是本地的。

  • 请注意,这会禁用系统中的所有硬件图形加速,而不仅仅是 WPF。 (4认同)