修正:當你在基於 .NET Framework 3.5 SP1 的應用程式中使用 Windows Presentation Foundation (WPF) 渲染圖形時,可能會遇到幾個問題

套用到
.NET Framework 3.5 Service Pack 1

      
    

症狀

當你在基於 .NET Framework 3.5 Service Pack 1 (SP1 Windows Presentation Foundation () 應用程式中使用 WPF) 渲染圖形時,可能會遇到以下問題之一。

問題 1

當你在 WPF 應用程式中更改 VisualBrush.Visual 屬性的值時,應用程式就會當機。

問題 2

當你執行以下其中一項動作時,WPF 應用程式的渲染執行緒會發生記憶體洩漏:

  • 你會使用軟體渲染流程來渲染包含 VisualBrush 物件或 DrawingBrush 物件的 3D 場景。 例如,當你執行以下其中一個動作時,你正在使用軟體渲染管線:

    • 你可以用 RenderTargetBitmap 類別來渲染場景。
    • 你印出現場。
    • 你把渲染層屬性設為 0。
    • 你是透過遠端桌面連線渲染場景。
  • 你可以在不使用 Windows 顯示驅動程式模型 (WDDM) 的電腦上,使用 WriteableBitmap 類別來渲染場景。

  • 你可以使用硬體渲染管線來渲染場景,方法是在不使用 WDDM 的電腦上使用平鋪的 VisualBrush 物件或平鋪的 DrawingBrush 物件。

          

第三期

使用分層視窗的 WPF 應用程式在執行以下任一動作時會當機:

  • 你把使用 Windows XP 顯示驅動程式模型 (XPDDM) 的電腦設為待機,然後從待機狀態恢復。
  • 你會切換到 Windows XP 的全螢幕主控台模式。

原因

原因一

此問題是因為渲染執行緒在執行緒中的操作順序錯誤時,會回傳通用錯誤。 這些操作會使子物件與空父物件分離。

例如,視覺物件必須先從 VisualBrush 物件中移除,才能從 VisualBrush 物件中分離。 然而,移除視覺物件的操作順序可能錯誤。 因此,Visual 物件會與空父物件分離。

原因二

此問題是因為渲染執行緒中的參考計數錯誤所致。

原因三

此問題是因為 Win32 錯誤代碼處理不當所致。

解決方式

要解決此問題,請套用以下 Microsoft 知識庫文章中描述的熱修正套件:

2667241 WPF) Windows Presentation Foundation (Microsoft.NET Framework 3.5 版本的更新彙整版本可供提供

更多資訊

堆疊輸出

System.InvalidOperationException: An unspecified error occurred on the render thread.
at System.Windows.Media.MediaContext.NotifyPartitionIsZombie(Int32 failureCode)
at System.Windows.Media.MediaContext.NotifyChannelMessage()
at System.Windows.Interop.HwndTarget.HandleMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。