[#] Vorrei disegnare un Bitmap ma compare l'errore "Problemi con Syste...

martedì 25 agosto 2009 - 12.24

rikicecchi Profilo | Newbie

Ciao a tutti, ho un problema in C# con l'eccezione in oggetto: la System.InvalidOperationException.
Spiego subito la situazione: ho una Form in cui ho posizionato 5 pannelli con al loro interno altrettante PictureBox in cui ho creato delle Bitmap (una per ogni PictureBox).
Ho quindi in ogni pannello una pictureBox che contiene una Bitmap.
Attraverso 5 Thread disegno contemporaneamente su queste 5 Bitmap usando una Classe disegnatore che ha 5 istanze diverse, una per ogni Bitmap.
Devo visualizzare delle linee che si ordinano,alcune volte il codice funziona perfettamente terminando l'ordinamento, altre si interrompe generando l'eccezione in oggetto.
Se poi si prosegue senza dar peso all'eccezione la finestra che l'ha generata smette di aggiornarsi.

L'eccezione viene sollevata alla chiamata di questa riga di codice
Graphics g =Graphics.FromImage((e.getPictureBox()).Image);

E VisualStudio mi da questi "suggerimenti":
---------------------
Eccezione non gestita di tipo "System.InvalidOperationException" in system.drawing.dll

Informazioni aggiuntive: L'oggetto è correntemente utilizzato altrove.
---------------------------
Dove posso aver toppato?
Grazie mille

freeteo Profilo | Guru

Ciao,
hai provato a fare il dispose (o usare la sintassi "using") per gli oggetti Bitmap/Graphics che usi?
Tipicamente allocano pareccchie risorse che poi Windows non rilascia subito se non viene chiamato esplicitamente il Dispose dell'oggetto, e quindi potrebbe essere quello il motivo dell'errore...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

rikicecchi Profilo | Newbie

Ti riferisci a "using System.Drawing;"? È già inserito. Non capisco di che using dovrei usare. Grazie.

freeteo Profilo | Guru

>Ti riferisci a "using System.Drawing;"? È già inserito. Non capisco
>di che using dovrei usare. Grazie.
No, ti dicevo "hai provato a fare il dispose", ossia:

Bitmap bmp = ... ... ... bmp.Dispose();

oppure usando il patter "using" ossia facendo fare al framework da solo il Dispose quando ha finito di usare la variabile:

using(Bitmap bmp = ...) { ... ... }



Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5