症狀
當你在基於 .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 產品中的問題。