Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: #Aitor en 21 Octubre 2016, 05:42 am



Título: Me estoy volviendo loco con los timers. (Vb.net)
Publicado por: #Aitor en 21 Octubre 2016, 05:42 am
Buenas noches a todos, ¡Mucho tiempo sin pasar por aquí!

Os cuento mi idea y mi problema.

Mi idea es:

En el momento en el que la tecla adecuada es pulsada,  inicia un contador, a los tres minutos suena un pitido, y si la tecla no es pulsada en los próximos quince segundos,
vuelve a sonar el pítido en intervalos de quince segundos, así hasta que la tecla es pulsada, y una vez más empezaría a esperar 3 minutos para después seguir con los 15 segundos.

Dejo una imagen con un esquema que acabo de hacer para que se entienda mejor el ejemplo.

 (https://fotos.subefotos.com/77f49d513d0810f8d9e613a697b7a025o.png)


Aquí dejo la línea de código con sus comentarios para que os hagáis una idea de como voy.

Código
  1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  2.  
  3.        Dim Ascii As Integer = Asc(My.Settings.optionsHotkeys) ' Esa variable contiene el ascii de la tecla guardada por el usuario.
  4.        If (GetAsyncKeyState(Ascii)) Then ' Si es presionada...
  5.        ...
  6.  
  7.  

Aquí no tengo idea de cómo seguir de una manera correcta, sin hacer chapuzas, sólo se me ocurrió meter más timers del estilo

Código
  1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  2.  
  3.        Dim Ascii As Integer = Asc(My.Settings.optionsHotkeys) ' Esa variable contiene el ascii de la tecla guardada por el usuario.
  4.        If (GetAsyncKeyState(Ascii)) Then ' Si es presionada...
  5.        Timer2.Start()
  6.        Timer2.Interval = NumericUpDown1.Value * 60 * 1000 'Minutos estupilados por el usuario.
  7.        End if
  8.  
  9. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
  10.        ... 'Pitido
  11.        Timer3.Start()
  12.        Timer3.Interval = 15000 'Intervalo de 15 segundos
  13. Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
  14.        ... 'Pitidos cada 15 segundos...
  15.  
  16.  

En fin, cómo veis aquí pierdo la cordura, no sé que hacer y me pongo a crear timers cuál imbécil a diestra y siniestra sin ningún tipo de sentido.

¿Alguna idea?

Edito:

Terminé solucionandolo de una forma que considero un tanto mediocre...

Código
  1.    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  2.  
  3.        Dim Ascii As Integer = Asc(My.Settings.optionsHotkeys)
  4.  
  5.        If (GetAsyncKeyState(Ascii)) Then
  6.  
  7.            Select Case Timer2.Enabled
  8.                Case False
  9.                    Timer3.Start()
  10.                    Timer3.Interval = NumericUpDown1.Value * 60 * 1000
  11.                Case True
  12.                    Timer2.Stop()
  13.                    Timer3.Start()
  14.            End Select
  15.        End If
  16.  
  17.    End Sub
  18.    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
  19.        Sound.Play()
  20.    End Sub
  21.  
  22.    Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
  23.        Sound.Play()
  24.        Timer2.Interval = 15000
  25.        Timer2.Start()
  26.        Timer3.Stop()
  27.    End Sub