Crear Timer desde una clase y luego llamarlo en un evento para hacerlo funconar

Iniciado por Juanma91, 6 Junio 2013, 01:34 AM

0 Miembros y 1 Visitante están viendo este tema.

Juanma91

Hola, quiero crear un  esta clase Timer para mover unos villanos en un tablero aleatoriamente ,el codigo es el siguiente..

Imports System
Imports System.Timers


Public Class Timerclase
   
    Private Shared aTimer As New System.Windows.Forms.Timer()
    Shared villa1 As Villano
    Shared villa2 As Villano
    Shared villa3 As Villano
    Shared heroe As Heroe

    Private Shared Sub timermovervillanos(ByVal myObject As Object, _
                                           ByVal myEventsArgs As EventArgs)

        If heroe.GetMuerto = False Then
            If villa1.GetMuerto = False Then
                villa1.move()
            End If
            If villa2.GetMuerto = False Then
                villa2.move()
            End If
            If villa3.GetMuerto = False Then
                villa3.move()
            End If
        End If
        main()
    End Sub


    Public Shared Sub main()
        AddHandler aTimer.Tick, AddressOf timermovervillanos
        aTimer.Enabled = True
        aTimer.Interval = 500
        aTimer.Start()

    End Sub

     
End Class
  con un timer arrastrado desde controles y poniendo solo los if me va pero yo quiero controlar este timer para que luego lo llame en un metodo y funcione,

El Benjo

No estoy seguro de qué intentas hacer después de los "if" llamando nuevamente a main().

Código (vbnet) [Seleccionar]
If villa3.GetMuerto = False Then
                villa3.move()
            End If
        End If
        main()
    End Sub


Dime una cosa, ¿la aplicación colapsa o sigue funcionando pero no como esperabas?

En caso de que sea lo segundo verifica que la llamada al método que contiene los "if" se lleve a cabo; colócale un punto de interrupción en la línea:

Código (vbnet) [Seleccionar]
Private Shared Sub timermovervillanos(ByVal myObject As Object, ByVal myEventsArgs As EventArgs)

Si la aplicación llega hasta ahí, has la ejecución línea por línea para ver dónde está el error.

Otra cosa, intenta lo mismo comenzando con un punto de interrupción en tu método "main()".

Saludos y suerte.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Juanma91

Hola Benjo , coloque un punto de interrupción en los dos lados y es como si el programa "pasara de ellos" si coloco un timer arrastrando desde controles lo cual genera un timer1.tick(...) handles timer1.tick y desde ahi si lo mueve pero yo quiero crearlo con clase y luego llamarlo en un evento por ejemplo TimerClase.Main() para hacerlo funcionar pero no se porqué no va..!

XresH

Vos queres que haga lo mismo que el timer pero desde una clase?

Creo que entiendo eso, por que no pones un bucle con condición para saber cuando salir y listo.

O bien podes enviar  de vuelta a funcionar el code hasta que se te de la gana como algo asi mira:


       
DeNuevo:
If CheckBox1.Checked = 0 Then Exit Sub
If heroe.GetMuerto = False Then
            If villa1.GetMuerto = False Then
                villa1.move()
            End If
            If villa2.GetMuerto = False Then
                villa2.move()
            End If
            If villa3.GetMuerto = False Then
                villa3.move()
            End If
        End If
        goto DeNuevo
    End Sub


Entonces va a ejecutar el code siempre hasta que desmarques el checkbox, pero la condición la pones a tu criterio es un ejemplo.

Si se cuelga ponele un  Application.DoEvents() para darle respiro.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

Juanma91


Juanma91

Alguien puede ayudarme??????????????????????????????????????????????????

XresH

Si planteas de otra manera la duda podríamos entenderte, al menos yo no entiendo básicmamente tu idea, da a pensar muchas cosas, simplifica un poco a ver que podemos hacer.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

El Benjo

Bueno, Juanma 19, como me has dicho que tu al poner una interrupción en tu método "main()" dicha interrupción no se produce se confirman mis sospechas de que no tienes un punto en tu aplicación que llame a dicho método. Te explico con detalle:  ;)

Cuando creas un objeto con algo como:
Código (vbnet) [Seleccionar]
Private Objeto as ClaseObjeto = New ClaseObjeto()

En la creación de tu objeto se ejecuta el método "New()" no al método "main()" intenta haciendo el cambio al nombre del método para ver si te funciona. Y en caso de que no quieras que este método se llame al tiempo de crearlo entonces puedes dejar el nombre como "main()" o el nombre que quieras pero debes llmarlo en otra parte de tu código para que funcione. algo así como:
Código (vbnet) [Seleccionar]
ObjetoTimer.main()

Casi me olvido: Borra la llmada al método main() que te indiqué al final de los "if" cuando apliques alguna de las soluciones porque eso te va traer problemas (creo yo).

Espero que te hay quedado claro y te sea de utilidad.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.