none
Problemas con System.AccessViolationException RRS feed

  • Pregunta

  • Buen día amigos:

    Estoy desarrollando una aplicación en VB.Net que posee un protector de pantalla dentro de un formulario, que llama a una Windows media Player para correr vídeos de la empresa, cuando está en reposo. Todo funciona bien hasta que se abandona el protector de pantalla, ya que retorna con esta error al formulario que se encontraba en ejecución.

    Por lo que investigué, aducen que el problema se encuentra en la comctl32.dll de versión 5.0 "Se trata de un error en la versión 5.0 de los controles comunes de Windows (comctl32.dll) proporcionado por el sistema operativo."

    Como recomendación, aconsejan "Este problema se corrigió en la versión 6.0 de comctl32.dll. Puede resolver el problema en una aplicación de formularios Windows Forms mediante la modificación de la aplicación para participar en la versión 6.0 de comctl32.dll. Para participar en la versión 6.0 de comctl32.dll, formularios Windows Forms, aplicaciones deben llamar a Application.EnableVisualStyles."

    Mi aplicación corre desde la Sub Main, por lo que ha sido allí donde inicio la Sub con la línea " Application.EnableVisualStyles()"

    También he colocado una captación del error, pero la aplicación detecta el error y no permite seguir su curso.

    El formulario protector de pantalla, se llama desde un timer, y necesito que puedan manipularse las teclas flecha derecha, izquierda, Enter y Escape, estas 2 últimas, para que se usen en la salida del protector (cualquiera de ellas).

        Private Sub FG_Windows_Media_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
            Select Case e.KeyCode
                Case Keys.Right
                    Btn_Siguiente_Click(Btn_Siguiente, New EventArgs)
                Case Keys.Left
                    Btn_Anterior_Click(Btn_Anterior, New EventArgs)
                Case Keys.Escape, Keys.Enter
                    Me.Close()
                Case Else
            End Select
            e.SuppressKeyPress = False
        End Sub

    Esta rutina me detecta las teclas que necesito, y elimina las restantes.

    Por lo que he podido leer, este error sucede porque se llama a una aplicación externa (Windows Media Player) y eso produce un serio problema en la pila de llamadas de comandos internos. Esto es lo que dice la documentación de soporte "El problema se produce debido a un problema de temporización/re-entrancy que se produce cuando la aplicación está intentando mostrar el control ToolTip, pero a continuación, toma una ruta de código que realmente intenta ocultarlo antes de que se muestre inicialmente. Se trata de un error en la versión 5.0 de los controles comunes de Windows (comctl32.dll) proporcionado por el sistema operativo."

    Lo que no sé cómo hacer, es -por ejemplo- paralizar todos los controles antes de abrir el formulario, de modo de evitar que se pudiera producir lo antes descrito.

    Adicionalmente, de las pruebas que hice, la falla se produce cuando oprimo las teclas Escape o Enter, y no produce error cuando cierro el formulario protector con el botón de cierre superior derecho.

    Agradeceré sugerencias sobre este tema, ya que resulta extraño que este llamado no pueda hacerse.


    Juan Carlos


    martes, 5 de marzo de 2019 13:47

Respuestas

  • Parece una obviedad...

    De tanto probar, intenté que cuando se opriman cualquiera de las teclas (Escape o Enter), el sistema genere el juego de teclas: SendKeys.Send("%{F4}")

    Resulta que mediante este atajo, el formulario protector de pantalla se cierra sin problemas, el sistema no genera error y funciona tal cual lo espero. Gracias de todas maneras por la ayuda, y espero le sirva a alguno esta alternativa.

    No era un capricho ya que la idea de que cierre con Enter, obedece a que mediante el lector óptico, obtengo el Enter que necesito y no tengo que dejar a disposición un teclado ni un mouse.

    Gracias


    Juan Carlos

    martes, 5 de marzo de 2019 15:47