windows - Sådan løses winforms fejlen 'Der opstod en generisk fejl i GDI +.'?

Indlæg af Hanne Mølgaard Plasc

Problem

Jeg står over for følgende undtagelse i min C #. Net win forms ansøgning.
  Der opstod en generisk fejl i GDI +.
             på System.Drawing.Graphics.CheckErrorStatus (Int32 status)
             på System.Drawing.Graphics.DrawRectangle (Pen pen, Int32 x, Int32 y, Int32 bredde, Int32 højde)
             på WeifenLuo.WinFormsUI.Docking.DockWindow.OnPaint (PaintEventArgs e)
             på System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs e, Int16 lag, Boolean disposeEventArgs)
             på System.Windows.Forms.Control.WmPaint (Meddelelse &m)
             på System.Windows.Forms.Control.WndProc (Meddelelse &m)
             på System.Windows.Forms.ScrollableControl.WndProc (Meddelelse &m)
             på System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Meddelelse &m)
             på System.Windows.Forms.Control.ControlNativeWindow.WndProc (Meddelelse &m)
             på System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Det mest forvirrende punkt er, at det forekommer meget sjældent, når applikationen læser en formular (som indeholder nogle rige grafik, WPF-arbejde osv.), Kunne sige omkring 90\% af den tid, formularen er indlæst med succes. men meget få gange sker det at gengives og kun på nogle maskiner. På nogle andre maskiner fungerer denne form 100\% af tiden og står aldrig over for denne undtagelse. Jeg forstår ikke, hvorfor disse undtagelser sker, fordi det heller ikke viser den nøjagtige stakkens spor, der forårsager undtagelsen. Foreslå venligst, hvis man har nogen ide om, hvordan man skal håndtere det.

Bedste reference

Din kode lækker sandsynligvis lækre GDI-ressourcer. Tag et kig på med Taskmgr.exe, fanen Processer. Se + Vælg kolonner og kryds håndtag, USER objekter og GDI objekter. Kør dit program og observer de viste værdier for din proces. En konstant klatring værdi for GDI objekter staver problemer, showet er overstået når det når 10.000. Præcis hvad der kan forårsage lækagen er ikke helt så let at diagnosticere. Selvom du kan single-trin din kode i debugger og holde øje med taskmgr nummer. Den klassiske fejl er at skabe penne og pensler i en Paint event handler og ikke bortskaffe dem. Uden affaldssamleren løber ofte nok til at rydde op. Brug brug af sætningen til at rette.