Saltar al contenido principal

 none
Como pausar un evento (A) para dar inicio a otro evento (B) y al terminar de ejectuar el evento (B), se reanude el evento (A) RRS feed

  • Pregunta

  • El programa que estoy desarrollando es un pase de lista para un salon de clase. El programa dicta el nombre de los alumnos mediante un evento (A) llamado Iniciar
    Cuando el programa detecta que digo la palabra "Iniciar", se inicia este evento (A) y comienza a dictarme la lista de alumnos que tengo almacenados en una BD SQL. 

    Les dejo el codigo del evento Iniciar:

    Public Sub Iniciar(ByVal sender As System.Object, ByVal e As RecognitionEventArgs)
            MsgBox("Iniciar detectado")

            Dim apellidoP = ""
            Dim apellidoM = " "
            Dim nombre = " "
            Dim array(FormPaseDeLista.DataGridView1.Rows.Count - 1) As String


            ' convert the word list into a grammar
            Dim words As New Choices(wordlist)
            gram = New Grammar(New GrammarBuilder(words))
            recognition.LoadGrammar(gram)

            'Declarar deteccion a español.
            Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES")
            Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-ES")

            'Propiedades del speaker
            speeker.Rate = 1
            speeker.Volume = 100
            speeker.SelectVoiceByHints(2)

            i = 0
            For Each fila As DataGridViewRow In FormPaseDeLista.DataGridView1.Rows
                nombre = ""
                apellidoP = fila.Cells(1).Value.ToString
                apellidoM = fila.Cells(2).Value.ToString
                nombre = fila.Cells(3).Value.ToString
                nombre = apellidoP & " " & apellidoM & " " & nombre

                array(i) = nombre  'Almaceno nombre completo en una posicion de mi array
                i += 1
            Next

            For i = 0 To array.Length - 1     'Ciclo para pasar lista
                intento = 0
                asistencia = 0
                speeker.SpeakAsync(array(i))

            Next
     End Sub


    El Speeker que tengo declarado es el encargado para hacer que mi programa dicte los nombres de los alumnos. Y los dicto con el SpeakAsync(Array(i)). Dentro de la variable Array tengo los nombres de los alumnos por nombre, apellido paterno y materno. Entonces al fina me viene dictando por ejemplo "Martinez Ramirez Juan" o "Trejo Miranda Isabel" 

    El problema viene a la hora de detectar la asistencia.

    Debajo de donde dice: 

     speeker.SpeakAsync(array(i)) 
     
    es donde quiero pausar este evento (A) para dar inicio a un evento (B) donde debe detectar cuando alguien diga la palabra "Presente". 

    Este es el evento (B) que se llama PresentDetected
    ```
     Public Sub PresentDetected(ByVal sender As System.Object, ByVal r As RecognitionEventArgs)
            Dim cadenaUpdate = "update " & FormPaseDeLista.ComboBox1.Text & " set asistencia=1 where ID=" & i
            Dim comandoUpdate As New SqlCommand(cadenaUpdate, con)

            con.Open()
            comandoUpdate.ExecuteNonQuery()
            con.Close()
        End Sub
    ```
     Espero se entienda lo que quiero hacer. Muchas gracias.

     
    miércoles, 6 de noviembre de 2019 17:01

Todas las respuestas

  • No es necesario pausar nada, Todos los eventos, metodos, propiedades, etc funcionan en tiempo de ejecucion.

    Los eventos son controlados por metodos EventHandler que pueden llamarse igual que como se llama un metodo normal.

    Codigo de ejemplo para el metodo PresentDetected:

    PresentDetected(New Object(), New RecognitionEventArgs())
    Colocalo debajo speeker.SpeakAsync(array(i))

    No estoy seguro de que detecte la palabra Presente porque desconozco el derribado de la instancia (con) y de los datos de la base de datos.

    Si te sirve vota.

    viernes, 15 de noviembre de 2019 4:35