現象
.NET Framework 3.5 Service Pack 1 (SP1) の Windows Presentation Foundation (WPF) を使用してグラフィックスをレンダリングすると、次の問題の 1 つ発生する可能性があります-ベースのアプリケーションです。
問題 1
WPF アプリケーションでVisualBrush.Visualプロパティの値を変更すると、アプリケーションがクラッシュします。
問題 2
次の操作のいずれかを実行すると、WPF アプリケーションのレンダリング スレッドでメモリ リークが発生します。
-
VisualBrushオブジェクトまたはDrawingBrushオブジェクトを含む 3D シーンをレンダリングするのにには、ソフトウェア レンダリング パイプラインを使用します。たとえば、次の操作のいずれかを実行すると、ソフトウェア レンダリング パイプラインを使用しています。
-
シーンをレンダリングするには、 RenderTargetBitmapクラスを使用します。
-
シーンを印刷するとします。
-
描画層のプロパティを 0 に設定します。
-
シーンをレンダリングするにはリモート デスクトップ接続を経由します。
-
-
WriteableBitmapクラスを使用して、Windows のディスプレイ ドライバー モデル (WDDM) を使用していないコンピューター上では、シーンをレンダリングします。
-
VisualBrushオブジェクトを並べて表示またはタイルDrawingBrushオブジェクトを使用して、WDDM を使用していないコンピューター上でシーンをレンダリングするのにには、ハードウェア レンダリング パイプラインを使用します。
問題 3
使用する WPF アプリケーションは、次の操作のいずれかを実行すると、windows のクラッシュを階層化。
-
スタンバイ モードでは、Windows XP ディスプレイ ドライバー モデル (XPDDM) を使用するコンピューターを配置して、スタンバイ状態からコンピューターを再開します。
-
Windows XP でコンソールを全画面表示モードに切り替えます。
原因
原因 1
とき、スレッドの操作の順序が正しくレンダリング スレッドからの一般的なエラーが返されるために、この問題が発生します。これらの操作には、null の親オブジェクトからデタッチするのには、子オブジェクトがあります。
たとえば、 VisualBrushオブジェクトからデタッチする前に、 VisualBrushオブジェクトからオブジェクトを削除してください。 ただし、ビジュアルオブジェクトを削除する操作可能性があるの注文が間違っています。したがって、ビジュアルオブジェクトは、null の親オブジェクトからデタッチします。
原因 2
この問題は、参照カウントのレンダーのスレッドでエラーが発生したために発生します。
原因 3
この問題は、Win32 エラー コードが正しく処理されないために発生します。
解決策
この問題を解決するには、次のマイクロソフト サポート技術情報資料に記載されている修正プログラム パッケージが適用されます。
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)
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。