none
Retrazar el progreso de una Circunferencia RRS feed

  • Pregunta

  • Buenos dias

    En este pedacito de codigo se puede retrazar el progreso de la Circunferencia mediante el System.Threading ?

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            ' Draw a 200 by 150 pixel green rectangle.
            e.Graphics.DrawRectangle(Pens.Green, 10, 10, 200, 150)
            ' Draw a blue square
            e.Graphics.DrawRectangle(Pens.Blue, 30, 30, 150, 150)
            ' Draw a 150 pixel diameter red circle.
            e.Graphics.DrawEllipse(Pens.Red, 0, 0, 150, 150)
            ' Draw a 250 by 125 pixel yellow oval.
            e.Graphics.DrawEllipse(Pens.Yellow, 20, 20, 250, 125)
    
    
    
        End Sub

    Gracias

    MauricioIvan


    M3

    sábado, 21 de mayo de 2016 17:30

Respuestas

  • Hola MauricioIvan,

    Quieres mostrar primero los rectángulos y después de 3seg por ejemplo aparezcan los círculos ? Si es así, solo tendrías que agregarle el Thread.Sleep después de dibujar el segundo rectángulo, para que haga la pausa.

        Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    
            ' Draw a 200 by 150 pixel green rectangle.
            e.Graphics.DrawRectangle(Pens.Green, 10, 10, 200, 150)
    
            ' Draw a blue square
            e.Graphics.DrawRectangle(Pens.Blue, 30, 30, 150, 150)
    
            ' Draw a 150 pixel diameter red circle.
            Thread.Sleep(3000)
            e.Graphics.DrawEllipse(Pens.Red, 0, 0, 150, 150)
    
            Thread.Sleep(3000)
            ' Draw a 250 by 125 pixel yellow oval.
            e.Graphics.DrawEllipse(Pens.Yellow, 20, 20, 250, 125)
    
            Application.DoEvents()
    
        End Sub

    En este caso hago la pausa de 3 seg :

    1seg = 1000

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta MauricioIvan domingo, 22 de mayo de 2016 14:42
    sábado, 21 de mayo de 2016 17:54

Todas las respuestas

  • Hola MauricioIvan,

    Quieres mostrar primero los rectángulos y después de 3seg por ejemplo aparezcan los círculos ? Si es así, solo tendrías que agregarle el Thread.Sleep después de dibujar el segundo rectángulo, para que haga la pausa.

        Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    
            ' Draw a 200 by 150 pixel green rectangle.
            e.Graphics.DrawRectangle(Pens.Green, 10, 10, 200, 150)
    
            ' Draw a blue square
            e.Graphics.DrawRectangle(Pens.Blue, 30, 30, 150, 150)
    
            ' Draw a 150 pixel diameter red circle.
            Thread.Sleep(3000)
            e.Graphics.DrawEllipse(Pens.Red, 0, 0, 150, 150)
    
            Thread.Sleep(3000)
            ' Draw a 250 by 125 pixel yellow oval.
            e.Graphics.DrawEllipse(Pens.Yellow, 20, 20, 250, 125)
    
            Application.DoEvents()
    
        End Sub

    En este caso hago la pausa de 3 seg :

    1seg = 1000

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta MauricioIvan domingo, 22 de mayo de 2016 14:42
    sábado, 21 de mayo de 2016 17:54
  • No, esto no se puede hacer mediante System.Threadinng. En Windows Forms, la interfaz de usuario es mono-hilo, y no se puede acceder a ella desde otro Thread.

    Si lo que quieres es que la circunferencia se repinte periódicamente, usa un Timer que periódicamente llame a Me.Invalidate(). Eso hace que se dispare el evento Paint. Y dentro del evento Paint, puedes pintar la circunferencia tal como ahora mismo lo estás haciendo, pero si quieres tomando los parámetros (que ahora son fijos) desde unas variables ubicadas a nivel de Form, lo que te permitiría modificar las características de la circunferencia. Esas variables sí que las podrías modificar desde un Thread de background, si es que necesitas que evolucionen por separado.

    sábado, 21 de mayo de 2016 17:57
  • ¡La maldita ortografía! Después de leer la respuesta de Joel C. Naupa, veo que a lo mejor lo que quería decir el autor de la pregunta original era RETRASAR, cosa que se puede hacer con Thread.Sleep. En cambio puso RETRAZAR, que yo entendí como "volver a trazar", de ahí mi respuesta indicando que un Thread no servía para eso, e indicándole una manera de volver a trazar la circunferencia. Comprendo que para los latinoamericanos las dos palabras suenan igual, pero para nosotros los españoles la S y la Z se pronuncian completamente diferentes, y para nosotros es una palabra distinta.
    domingo, 22 de mayo de 2016 6:19
  • "Mejor llámame" me decia mi Papá (qepd) cuando le escribía. Asi que los dos tienen la razon. Lo que yo quise decir es que si se puede alcanzar a visualizar el progreso del dibujo de una circunferencia porque al correr el ejemplo carga tan rapido que la entrega muestra los dibujos instantaneos.

    Me perdonan la Horrorgrafia pero a estas alturas ya como que me voy con ese problemita.

    MauricioIvan


    M3

    domingo, 22 de mayo de 2016 14:42
  • Hola JC NaupaCrispin, traté de contactarte directamente en tu blog pero solo me aparecen Graficas de Estadisticas, y como te habras podido dar cuenta, mi nivel en VB es muy pobre y casi nadie se anima a ayudarme. Como o donde puedo escribirte?

    Gracias

    MauricioIvan


    M3

    lunes, 23 de mayo de 2016 17:25