Objawy
Podczas renderowania grafiki przy użyciu platformy Windows Presentation Foundation (WPF) w aplikacji opartej na platformie .NET Framework 3.5 z dodatkiem Service Pack 1 (SP1) może wystąpić jeden z następujących problemów.
Zeszyt 1
Po zmianie wartości właściwości VisualBrush.Visual w aplikacji WPF aplikacja ulega awarii.
Zeszyt 2
Przeciek pamięci występuje w wątku renderowania aplikacji WPF podczas wykonywania jednej z następujących akcji:
Potok renderowania programowego służy do renderowania sceny 3D, która zawiera obiekt VisualBrush lub obiekt DrawingBrush. Na przykład potok renderowania programowego jest używany podczas wykonywania jednej z następujących akcji:
- Scena jest renderowana przy użyciu klasy RenderTargetBitmap.
- Drukujesz scenę.
- Właściwość warstwy renderowania jest ustawiana na 0.
- Scena jest renderowana za pośrednictwem połączenia pulpitu zdalnego.
Scena jest renderowana przy użyciu klasy WriteableBitmap na komputerze, na którym nie jest używany Windows Display Driver Model (WDDM).
Potok renderowania sprzętowego służy do renderowania sceny przy użyciu sąsiadującego obiektu VisualBrush lub sąsiadującego obiektu DrawingBrush na komputerze, który nie korzysta z WDDM.
Zeszyt 3
Aplikacje WPF używające okien warstwowych ulegają awarii podczas wykonywania jednej z następujących akcji:
- Przełączono komputer ze sterownikiem Windows XP Display Driver Model (XPDDM) w stan wstrzymania, a następnie wznowiono jego działanie.
- Przełączono na pełnoekranowy tryb konsoli w systemie Windows XP.
Przyczyna
Przyczyna 1
Ten problem występuje, ponieważ ogólny błąd jest zwracany z wątku renderowania, gdy operacje w wątku są niepoprawnie uporządkowane. Te operacje powodują odłączenie obiektów podrzędnych od obiektu nadrzędnego o wartości null.
Na przykład obiekt Visual musi zostać usunięty z obiektu VisualBrush, zanim zostanie odłączony od obiektu VisualBrush. Jednak operacje usuwania obiektu wizualnego mogą być nieprawidłowo uporządkowane. W związku z tym obiekt Visual odłącza się od pustego obiektu nadrzędnego.
Przyczyna 2
Ten problem występuje z powodu błędu zliczania odwołań w wątku renderowania.
Przyczyna 3
Ten problem występuje, ponieważ kod błędu Win32 jest niepoprawnie obsługiwany.
Rozwiązanie
Aby rozwiązać ten problem, należy zastosować pakiet poprawek opisany w następującym artykule z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
2667241 Dostępny jest pakiet zbiorczy aktualizacji Windows Presentation Foundation (WPF) dla systemu Microsoft .NET Framework 3.5
Więcej informacji
Dane wyjściowe stosu
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)
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.