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?
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
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? –
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? –