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

18
如何在WPF中禁用硬件加速?这是什么东西?它是Windows设置、Visual Studio设置,还是您需要更改WPF项目的代码?它会影响您正在运行的程序还是全局系统?
禁用WPF中的硬件加速程序步骤是什么?它是指令,Windows设置或者Visual Studio设置吗?或者只需更改WPF项目代码即可?禁用后,它只会影响您当前运行的程序还是整个系统?

这回答解决了你的问题吗?软件渲染模式-WPF - Wai Ha Lee
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. 禁用硬件加速注册表键
  2. ProcessRenderMode
  3. RenderMode(每个目标)

25

这是一项全局设置。有关自定义WPF渲染的注册表键和其他详细信息,请参见WPF文档中的图形渲染注册表设置

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

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


1
“你的答案在另一个城堡里:什么时候一个答案不是答案?” - user585968
2
最好的方法是仅在您的应用程序中禁用它。请参阅Konstantin的其他答案。 - Warren P
@WarrenP 当然,但有时候你在处理一个出了问题的程序或者你没有代码访问权限时,注册表成为最后的选择。 - Alejandro
另一个我认为更新的链接:https://learn.microsoft.com/zh-cn/dotnet/framework/wpf/graphics-multimedia/graphics-rendering-registry-settings - akostadinov

16

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

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


4
注意,这将禁用系统中的所有硬件图形加速,而不仅仅是WPF。 - itowlson
这在大多数系统中都不可用,因为只要安装了它们的驱动程序,nVidia和Ati都不允许您禁用(甚至更改)硬件加速。@itowlson给出了正确的答案。 - Odys
同意@itowlson的观点。当下面提到的仅禁用WPF时,这会禁用所有硬件加速。 - Jippers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接