Páginas

lunes, 30 de marzo de 2015

No se controló System.ComponentModel.Win32Exception // Error al crear identificador de ventana

Logo .Net  Trabajo para una empresa como desarrollador de software y trabajando en proyecto encuentro un mensaje como el que se describe en el título de post, bueno, ¿qué hacer en ese caso? (programando en .Net).

Publicidad

   Tardé mucho en encontrar la solución, agradezco en parte a éste sitio por darme una pista  http://social.msdn.microsoft.com/Forums/es-ES/770bb15e-ac4f-4cfa-bba3-02b08c29f668/no-se-control-systemcomponentmodelwin32exception-error-al-crear-identificador-de-ventana.

   El caso es que si nuestro programa carga muchísimas veces la misma ventana (aunque liberemos recursos) .net tarde o temprano falla, lo mejor es cargar la ventana (no importa que sea en un panel) y luego enviar los datos a ella mediante una función, en lugar de recargar una y otra vez la ventana con los nuevos datos.

2 comentarios:

  1. Buenos dies;
    tengo el mismo problema; no entiendo como lo haces, ¿podrias enviar un codigo de ejemplo?
    Gracias

    ResponderBorrar
    Respuestas
    1. Básicamente lo que vas a hacer es lo siguiente:

      De manera global a tu formulario, desde el cual vas a llamar a otro creas una variable como la siguiente:

      Private frmemployeewindow As frmEmployee = Nothing

      donde frmEmployee es el tipo de ventana a abrir (en este caso los empleados a mostrar), recuerda, no vamos a estar creando y destruyendo la ventana por cada vez que lo necesitemos, después de muchas veces vb.net da error y nos cierra la aplicación, lo que vamos a hacer es crear una ventana y reutilizarla tantas veces como sea posible, y así resolver el problema System.ComponentModel.Win32Exception

      Ahora, hay que iniciar la variable la primera vez que la llamemos (esto va dentro de tu botón mostrar empleados)

      If IsNothing(frmemployeewindow) = True Then
      frmemployeewindow = New frmEmployee()
      End If


      If frmemployeewindow.Visible = False Then

      frmemployeewindow.Owner = Me
      frmemployeewindow.Visible = True
      frmemployeewindow.ShowEmployees()

      End If

      Al final, como puedes ver lo único que hay que hacer es invocar la función ShowEmployees(), pero ya no creamos la ventana una y otra vez, solo la reutilizamos y asi evitamos que vb.net irremediablemente se coma toda la memoria (aunque la liberemos), espero te sirva el truco.

      Borrar