2011-01-17 10 views
15

Caso di utilizzo: sto utilizzando WPF per sovrapporre dinamicamente testo alle immagini in un contesto Web.System.Windows.Media.DrawingVisual.RenderOpen() errore dopo un periodo

Soluzione: sto usando un DrawingContext da un DrawingVisual (avvolto in una dichiarazione using) per disegnare la bitmap originale e sovrapporre il testo.

Problema: Dopo poche migliaia chiede il metodo [DrawingVisual].RenderOpen() inizia a rifiutare l'esecuzione e getta la seguente eccezione:

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: L'unica soluzione per questo è di riciclare il pool di applicazioni IIS sul server che risolve il problema per alcune ore.

Domanda: Qualcuno ha una riflessione sulla causa di questo problema (perdite, threading, codice non gestito, ecc.)? C'è un altro modo per ottenere del testo su un'immagine evitando il disegno visivo? Forse scrivere la geometria su una bitmap e sovrapporre direttamente le bitmap?

+1

Sto avendo un problema simile: http://stackoverflow.com/questions/5195808/wpf-formattedtext-the-system-cannot-find-the-file -specified-exception-in-a-serv – Aligned

+0

Puoi condividere uno snippet di codice su come stai prendendo DrawingContext e DrawingVisual? Perché non riciclare solo il DrawingVisual? Stai permettendo al Dispatcher di pompare? –

+0

So che questa è una vecchia domanda, tuttavia il processo perde memoria o handle? Sembra che una discarica potrebbe aiutare a raggiungere la radice del problema? –

risposta

1

Questa è una vecchia patch - e avrei pensato che fosse inclusa in .NET 4.x - ma non ne sono così sicuro. Ad ogni modo - puoi dare un colpo.

» Discussion & Bug Report

» .NET Patch(x86)