2011-01-17 4 views
15

Use Case: Ich verwende WPF, um Text dynamisch auf Bildern innerhalb eines Webkontexts zu überlagern.System.Windows.Media.DrawingVisual.RenderOpen() Fehler nach einer Zeit

Lösung: Ich bin mit einem DrawingContext von einer DrawingVisual (in einer using Anweisung verpackt) die ursprüngliche Bitmap zu zeichnen und Text überlagert.

Problem: Nach ein paar tausend fordert die [DrawingVisual].RenderOpen() Methode auszuführen beginnt die Ablehnung und wirft die folgende Ausnahme:

The system cannot find the file specified System.ComponentModel.Win32Exception UInt16 RegisterClassEx(WNDCLASSEX_D) at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d) 
at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks) 
at System.Windows.Media.MediaContextNotificationWindow..ctor(MediaContext ownerMediaContext) 
at System.Windows.Media.MediaContext..ctor(Dispatcher dispatcher) 
at System.Windows.Media.MediaContext.From(Dispatcher dispatcher) 
at System.Windows.Media.Visual.VerifyAPIReadWrite() 
at System.Windows.Media.DrawingVisual.RenderOpen() 
at ... 

Temp fix: Die einzige Lösung für diese ist der IIS-Anwendungspool auf dem Server recyceln der behebt das Problem für ein paar Stunden.

Frage: Jeder hat einen Gedanken über die Ursache dieses Problems (Lecks, Threading, unmanaged Code usw.)? Gibt es eine andere Möglichkeit, Text auf ein Bild zu bekommen, um das Zeichnen zu vermeiden? Vielleicht Geometrie in eine Bitmap schreiben und die Bitmaps direkt überlagern?

+1

Ich bin ein ähnliches Problem mit: http://stackoverflow.com/questions/5195808/wpf-formattedtext-the-system-cannot-find-the-file -specified-exception-in-a-serv – Aligned

+0

Können Sie ein Code-Snippet teilen, wie Sie DrawingContext und DrawingVisual erhalten? Warum nicht einfach das DrawingVisual recyceln? Erlauben Sie dem Dispatcher zu pumpen? –

+0

Ich weiß, das ist eine alte Frage, aber verliert der Prozess Speicher oder Griffe? Scheint vielleicht ein Hang-Dump zur Wurzel des Problems zu kommen? –

Antwort

1

Dies ist ein alter Patch - und ich hätte angenommen, dass es in .NET 4.x enthalten war - aber ich bin mir nicht so sicher. Wie auch immer - Sie können es versuchen.

» Discussion & Bug Report

» .NET Patch(x86)