Visual Basic.NET - Uso correcto del método invoke

 
Vista:
sin imagen de perfil
Val: 129
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Jaime (50 intervenciones) el 19/12/2020 09:50:09
Buenos días compañeros, desde mis humildes conocimientos he querido hacer una versión del juego 'PONG' el cual adjunto, aún le falta más física a la pelota y no está acabado pero se puede jugar.
El caso es que no consigo algo tan simple como mostrar un Label cada vez que se produce un gol.
Entiendo que un Timer se ejecuta en otro hilo y por lo tanto para acceder a la propiedad visible del Label desde la ejecución del mismo debo hacerlo a través del método Invoke, pero no me funciona. Si alguien me puede decir porqué se lo agradeceré o bien si no es la forma correcta de hacer esto. Adjunto el archivo

Lo único que se me ocurre es que en vez de crear el label en modo gráfico lo cree desde código dentro del Timer, es correcto esto o es que ya mezclo tantos conceptos que la lio más?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Phil Rob (1554 intervenciones) el 19/12/2020 14:35:15
Hola Jaime,

No puedo utilizar tu archivo Pong-V2.Rar. Windows Defender dice que contiene MalWare.

Eliminar todo los ficheros .EXE que lo contiene et rehace el archivo.

Pero recordo haber escrito un programa "Pong" en 1983. Esta en un computadora Tandy TRS-II. Lo he hecho mas tarde en un computadora Commodor 64. Nunca he utilizado el MultiThread, no he utilizado Invoke ...

Si envias tu archivo, miraré ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Phil Rob (1554 intervenciones) el 19/12/2020 21:39:34
Gracias.

He podido abrid el archiva sin error. Lo miraré mañana. No prometo repuesta a tu pregunta.

Buenas noches ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 129
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Jaime (50 intervenciones) el 20/12/2020 10:38:36
Aún sin respuesta estaré agradecido por tu interés, si te vale de ayuda en este archivo he conseguido avanzar algo, el invoke funciona bien, el problema reside en el thread.sleep del Procedimiento Sub Mostrar_Gol(), hace que no muestre la actualización del buffer, es como que no le da tiempo a actualizarse antes de que el sleep mande a dormir a la aplicación.
He probado creando un proceso de espera pero sale del bucle while y no me muestra el label, tiene que ser algo del buffer, no sé como se debe de manejar
1
2
3
4
5
Private sub Pausa (byval Segundos as integer)
Dim Tiempo as Datetime = now.Addseconds(Segundos)
While Tiempo.Second <>now.second
End While
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Phil Rob (1554 intervenciones) el 20/12/2020 11:37:41
Hola,

No puedo cargar bien el proyecto en VisualStudio y no puedo lo testar (mira ilustración).

Pero veo el procedimiento Comprobar_Gol donde llamas Mostrar_Gol y Ocultar_Gol. Me pregunto porque utilizar Invoke y tras, esperar que tiempo pasa.
Porqué no escribir :

1
2
3
4
5
6
7
  '  Me.Invoke(Sub() Mostrar_Gol())
  '  Thread.Sleep(3000)
  '  Me.Invoke(Sub() Ocultar_Gol())
 
  Mostrar_Gol()
  Posa(3)
  Ocultar_Gol()

Quiza puedes utilizar un Timer en Mostrar_Gol y Ocultar_Gol :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
' ...
Dim WithEvents Timer_Gol as New Timer
 
    Private Sub Timer_Gol_Tick(sender As Object, e As EventArgs) Handles Timer_Gol.Tick
          Ocultar_Gol()
    End Sub
 
  Private Sub Mostrar_Gol()
 
Timer_Gol.Interval = 3000
Time_Gol.Start
 
        Panel1.Visible = False
        lbl_Gol.Visible = True
 
 
    End Sub
 
    Private Sub Ocultar_Gol()
 
Time_Gol.Stop
 
        Panel1.Visible = True
        lbl_Gol.Visible = False
 
    End Sub
 
 
' y en Comprobar_Gol, solamente llamar Mostrar_Gol cuando quieres.
 
   Private Sub Comprobar_Gol()
' ... ... ...
             Mostrar_Gol()
' ... ... ...

Espero te dar una buena idea ...



Pong
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 129
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Jaime (50 intervenciones) el 20/12/2020 11:45:17
Tienes razón con el invoke, no era necesario, ya lo solucioné, simplemente no dejaba que entrara el evento paint del formulario, en el procedimiento de espera le incorporé application.doevents antes del while y ya funciona.
Me estaba liando con delegados, hilos y otros enseres jajaja, era mucho más simple. En breve vuelvo a subir el archivo por si ha alguien le interesa.
Muchas gracias por las ayudas, que no es la primera que me das ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso correcto del método invoke

Publicado por Phil Rob (1554 intervenciones) el 20/12/2020 12:25:33
Bravo!
Que tenga un buen domingo ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar