Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Object is currently in use elsewhere con C# y aplicaciones GDI

En mi día a día laboral, con nada lidie mas que con analizar y modificar código realizado por otro programador!, tratar de entender que quizo hacer y como lo quizo hacer suele resultar harto dificil! y en algunos casos, inviable.
Pero la idea no es hablar sobre esto, sino sobre un error que me comenzo a aparecer luego de aplicarles mis "cambios mágicos".
Basicamente la aplicación manejaba gran cantidad de imágenes y las iba aplicando ciertos cambios y las iba previsualizando en un picturebox constantemente.
Por esas cosas de la computacion, y en casos muy particulares, la aplicación lanzaba la excepción

Object is currently in use elsewhere

Luego de unos dias de investigación, encontre lo siguiente: La visualización de la imagen se realizaba en el mismo hilo en el que se queria modificar, es decir, en el mismo hilo se queria acceder a un objeto que se encontraba aun en uso.

La solución fue simple, lanzar el proceso de visualización de la imagen en un hilo separado, quedando por un lado el hilo que realiza la modificacion de la imagen y por otro lado, la visualizacion. Código de ejemplo utilizando un BackGroundWorker:

//Creamos el parametro para pasar la imagen
ArrayList parameters = new ArrayList();
//Agregamos la imagen
parameters.Add(LaImagenAmostrar);
//Creamos el hilo en un BackgroundWorker
BackgroundWorker bk = new BackgroundWorker();
//OnShowImage= método que gestiona la tarea principal del backgroundworker
bk.DoWork += new DoWorkEventHandler(OnShowImage);
//Lanzamos el Hilo!
bk.RunWorkerAsync(parameters);


private void OnShowImage(object sender, DoWorkEventArgs e)
{
//Recuperamos los parametros recibidos
ArrayList parameters = e.Argument as ArrayList;
//Casteamos a imagen
Image imgToShow = parameters[0] as Image;
//La mostramos en el pictureBox
previewPictureBox.Image = imgToShow;
}
bk.DoWork += new

Con eso solucione el error de mi aplicacion y ademas, gano en rendimiento, aislando los procesos y optimizando los recursos.


This post first appeared on Programo En .NET (Programa En Punto Net!), please read the originial post: here

Share the post

Object is currently in use elsewhere con C# y aplicaciones GDI

×

Subscribe to Programo En .net (programa En Punto Net!)

Get updates delivered right to your inbox!

Thank you for your subscription

×