FIX:.NET Framework 3.5 SP1 기반 응용 프로그램에서 Windows Presentation Foundation (WPF)를 사용 하 여 그래픽을 렌더링 하는 경우 몇 가지 문제점을 발생할 수 있습니다.

적용 대상: .NET Framework 3.5 Service Pack 1



증상


.NET Framework 3.5 서비스 팩 1 (SP1)에서 Windows Presentation Foundation (WPF)를 사용 하 여 그래픽을 렌더링 하는 경우 다음 문제 중 하나가 발생할 수 있습니다-기반 응용 프로그램입니다.


문제 1

WPF 응용 프로그램에서 VisualBrush.Visual 속성의 값을 변경 하면 응용 프로그램이 충돌 합니다.

문제 2

다음 작업 중 하나를 수행할 때 렌더링 스레드에서 WPF 응용 프로그램의 메모리 누수가 발생 합니다.
  • VisualBrush 개체 또는 DrawingBrush 개체를 포함 하는 3 차원 장면 렌더링 소프트웨어 렌더링 파이프라인을 사용 합니다. 예를 들어, 다음 작업 중 하나를 수행할 때 소프트웨어 렌더링 파이프라인 사용 하는.
    • RenderTargetBitmap 클래스를 사용 하 여 장면을 렌더링 합니다.
    • 장면을 인쇄 합니다.
    • 0으로 렌더링 계층 속성을 설정 합니다.
    • 원격 데스크톱 연결을 통해 장면을 렌더링 있습니다.
  • Windows 디스플레이 드라이버 모델 (WDDM)을 사용 하지 않는 컴퓨터에 WriteableBitmap 클래스를 사용 하 여 장면을 렌더링 합니다.
  • WDDM을 사용 하지 않는 컴퓨터에는 바둑판식된 VisualBrush 개체 또는 바둑판식된 DrawingBrush 개체를 사용 하 여 장면을 렌더링 하드웨어 렌더링 파이프라인을 사용 합니다.

문제 3

WPF 응용 프로그램을 사용 하는 다음 작업 중 하나를 수행할 때 windows 충돌을 계층:
  • 대기 모드로 Windows XP 디스플레이 드라이버 모델 (XPDDM)를 사용 하 여 컴퓨터를 대기 모드에서 컴퓨터를 다시 시작한 다음.
  • Windows XP에서 콘솔 전체 화면 모드로 전환 하면

원인


원인 1

스레드에서 작업이 잘못 정렬 되는 경우 일반 오류 렌더링 스레드에서 반환 됩니다이 문제가 발생 합니다. 자식 개체에 null 부모 개체 로부터 분리 하려면 이러한 작업으로 인해.

예를 들어, 시각적 개체 VisualBrush 개체에서 분리 하기 전에 VisualBrush 개체에서 제거 합니다. 그러나 Visual 개체를 제거 하 여 주문할 수 있습니다 하지 제대로. 따라서 시각적 개체에 null 부모 개체 로부터 분리합니다.

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