症状
在.NET Framework 3.5 Service Pack 1 (SP1) 中使用 Windows Presentation Foundation (WPF) 呈现图形时,可能会遇到以下问题之一-基于应用程序。
问题 1
在 WPF 应用程序中的VisualBrush.Visual属性的值更改时,该应用程序崩溃。
问题 2
当您执行下列操作之一时,呈现 WPF 应用程序线程中发生内存泄漏︰
-
您可以使用软件呈现管道呈现三维场景,其中包括一个VisualBrush对象或DrawingBrush对象。例如,您使用软件呈现管道时执行下列操作之一︰
-
您可以通过使用RenderTargetBitmap类呈现场景。
-
打印的场景。
-
呈现层属性设置为 0 时。
-
通过远程桌面连接中呈现的场景。
-
-
在不使用 Windows 显示驱动程序模型 (WDDM) 的计算机上使用WriteableBitmap类呈现场景。
-
使用硬件呈现管道呈现不使用 WDDM 的计算机上使用平铺的VisualBrush对象或平铺的DrawingBrush对象的场景。
问题 3
WPF 应用程序使用分层窗口崩溃,当您执行下列操作之一︰
-
使计算机进入等待状态,使用 Windows XP 显示驱动程序模型 (XPDDM),然后在您继续计算机从待机状态。
-
切换到全屏显示控制台模式时在 Windows XP 上。
原因
原因 1
因为一般错误从呈现线程在线程中的操作进行排序不正确时,将出现此问题。这些操作会导致分离从空父对象的子对象。
例如,一个可视对象必须删除从VisualBrush对象之前与VisualBrush对象分离。 但是,若要删除对象的可视对象的操作可能不正确排序。因此,从空父对象中分离的可视对象。
原因 2
由于引用计数错误呈现线程中的发生此问题。
原因 3
因为 Win32 错误代码处理不正确,将出现此问题。
解决方案
若要解决此问题,应用下面的 Microsoft 知识库文章中描述的修复程序包:
2667241更新汇总是可用的 Windows Presentation Foundation (WPF) 为 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 产品中的问题。