2010-01-30 698 views
13

在WPF中禁用硬件加速的過程是什麼?究竟是什麼?它是一個Windows設置,一個視覺工作室設置或您在wpf項目的代碼中改變的東西?它只會影響您正在運行的程序,還是會影響整個系統?如何禁用wpf中的硬件加速?

回答

-5

這是一個系統範圍的設置,從桌面,右鍵單擊彈出菜單,單擊屬性,並在那裏查看視頻設置以禁用硬件加速或可能有系統托盤圖標爲圖形設置。這是系統範圍而不是本地的。

希望這會有所幫助, 最好的問候, 湯姆。

+3

注意這會禁用系統中的所有硬件圖形加速,而不僅僅是WPF。 – itowlson 2010-01-30 22:14:07

+0

這在大多數系統中不可用,因爲只要安裝了驅動程序,nVidia和Ati都不允許您禁用(甚至更改)硬件加速。 @itowlson對此有正確答案。 – Odys 2014-02-01 16:36:05

+0

同意@itowlson。當禁止WPF單獨被禁用時,這將禁用所有硬件加速 – Jippers 2014-03-21 20:31:53

21

這是一個機器範圍的註冊表設置。請參閱WPF文檔中的Graphics Rendering Registry Settings以獲取註冊表項以及與定製WPF呈現相關的其他詳細信息。

上市的關鍵是: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration

的MSDN文檔是.NET 4.5「不可用」,所以這可能是一個depricated選項只能在4.0或以下。

+2

這應該被接受爲正確答案 – Odys 2014-02-01 16:36:30

+1

_ [您的答案在另一個城堡中:何時回答不是答案?](http://meta.stackexchange。 com/questions/225370 /你的回答是另一個城堡什麼時候回答不是答案)_ – MickyD 2015-03-03 01:15:53

+0

僅僅爲你的應用程序禁用它會好得多。查看Konstantin的其他答案 – 2015-07-07 15:47:42

29

您可以從.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窗口的事件並執行相同操作。

另外,您可以set it on Process level

RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; 

軟件渲染的優先順序是:

  1. DisableHWAcceleration註冊表項
  2. ProcessRenderMode
  3. RenderMode(按目標)