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

问题描述 投票:0回答:5

在WPF中禁用硬件加速的步骤是什么?究竟是什么?它是 Windows 设置、Visual Studio 设置还是您在 WPF 项目代码中更改的内容?它只会影响您正在运行的程序还是会影响整个系统?

wpf hardware-acceleration
5个回答
47
投票

从 .Net 3.5 SP1 开始,您可以在

Window
级别禁用它。

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);
    }
}

或者您可以订阅窗口的

SourceInitialized
事件并执行相同的操作。

或者您可以将其设置为进程级别

RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;

软件渲染的优先顺序是:

  1. 禁用HWA加速注册表项
  2. 处理渲染模式
  3. 渲染模式(每个目标)

25
投票

它是机器范围的注册表设置。请参阅 WPF 文档中的图形渲染注册表设置,了解注册表项以及与自定义 WPF 渲染相关的其他详细信息。

列出的关键是:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration

MSDN 文档对于 .NET 4.5“不可用”,因此这可能是一个仅适用于 4.0 或更低版本的已弃用选项。


16
投票

在版本 4.0 中,您还可以使用

RenderOptions.ProcessRenderMode
设置进程范围首选项 (http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx)。


2
投票

您还可以通过在MainWindow中添加以下代码来禁用WPF应用程序中的硬件加速。

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

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

    base.OnSourceInitialized(e);
}

这解决了我的 TeamViewer 问题。

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


-9
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.