해결 방법: .NET Framework 3.5 SP1 기반 애플리케이션에서 WPF(Windows Presentation Foundation)를 사용하여 그래픽을 렌더링할 때 몇 가지 문제가 발생할 수 있습니다.

적용 대상
.NET Framework 3.5 Service Pack 1

      
    

증상

.NET Framework 3.5 SP1(서비스 팩 1) 기반 애플리케이션에서 WPF(Windows Presentation Foundation)를 사용하여 그래픽을 렌더링할 때 다음 문제 중 하나가 발생할 수 있습니다.

문제 1

WPF 애플리케이션에서 VisualBrush.Visual 속성의 값을 변경하면 애플리케이션이 충돌합니다.

문제 2

다음 작업 중 하나를 수행할 때 WPF 애플리케이션의 렌더링 스레드에서 메모리 누수가 발생합니다.

  • 소프트웨어 렌더링 파이프라인을 사용하여 VisualBrush 개체 또는 DrawingBrush 개체를 포함하는 3D 장면을 렌더링합니다. 예를 들어 다음 작업 중 하나를 수행할 때 소프트웨어 렌더링 파이프라인을 사용합니다.

    • RenderTargetBitmap 클래스를 사용하여 장면을 렌더링합니다.
    • 장면을 인쇄합니다.
    • 렌더링 계층 속성을 0으로 설정합니다.
    • 원격 데스크톱 연결을 통해 장면을 렌더링합니다.
  • WDDM(Windows 디스플레이 드라이버 모델)을 사용하지 않는 컴퓨터에서 WriteableBitmap 클래스를 사용하여 장면을 렌더링합니다.

  • 하드웨어 렌더링 파이프라인을 사용하여 WDDM을 사용하지 않는 컴퓨터에서 타일식 VisualBrush 개체 또는 타일된 DrawingBrush 개체를 사용하여 장면을 렌더링합니다.

          

문제 3

다음 작업 중 하나를 수행할 때 계층화된 Windows를 사용하는 WPF 애플리케이션이 충돌합니다.

  • WINDOWS XP XP XPDDM(디스플레이 드라이버 모델)을 사용하는 컴퓨터를 대기 상태로 전환한 다음 대기 상태로 컴퓨터를 다시 시작합니다.
  • Windows XP에서 전체 화면 콘솔 모드로 전환합니다.

원인

원인 1

이 문제는 스레드의 작업이 잘못 정렬될 때 렌더링 스레드에서 제네릭 오류가 반환되기 때문에 발생합니다. 이러한 작업으로 인해 자식 개체가 null 부모 개체에서 분리됩니다.

예를 들어 VisualBrush 개체에서 분리되기 전에 VisualBrush 개체를 VisualBrush 개체에서 제거해야 합니다. 그러나 Visual 개체를 제거하는 작업이 잘못 정렬될 수 있습니다. 따라서 Visual 개체는 null 부모 개체에서 분리됩니다.

원인 2

이 문제는 렌더링 스레드의 참조 계산 오류로 인해 발생합니다.

원인 3

이 문제는 Win32 오류 코드가 잘못 처리되었기 때문에 발생합니다.

해결 방법

이 문제를 resolve 다음 Microsoft 기술 자료 문서에 설명된 핫픽스 패키지를 적용합니다.

2667241 Microsoft .NET Framework 3.5용 WPF(Windows Presentation Foundation)에 업데이트 롤업을 사용할 수 있습니다.

추가 정보

스택 출력

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 제품에서의 문제임을 확인했습니다.