Foros del Web » Programación para mayores de 30 ;) » .NET »

Llamada segura a subprocesos

Estas en el tema de Llamada segura a subprocesos en el foro de .NET en Foros del Web. Hola a todos. Estoy probando algunas cosas de programacion de videojuegos, y una de ellas es la animacion de un sprite. El código es el ...
  #1 (permalink)  
Antiguo 17/10/2008, 15:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Llamada segura a subprocesos

Hola a todos. Estoy probando algunas cosas de programacion de videojuegos, y una de ellas es la animacion de un sprite. El código es el siguiente:

Código:
Public Class Form1

    Private sp1 As Sprite
    Private thread As New Threading.Thread(AddressOf Act)

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawImage(sp1.getCurrentImage(), New Point(20, 20))
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        thread.Start()

    End Sub

    Private Sub Act()
        sp1 = New Sprite()
        While (True)
            sp1.incFrame()
            MyBase.Refresh()
        End While
    End Sub

End Class
El procedimiento Act() es el que se ejecuta al iniciar la apliación. En el mismo defino un nuevo sprite (es una clase creada) y entro en lo que sería el bucle principal del "juego". En este bucle lo que hago es incrementar el frame actual del sprite según el delay que tiene establecido por defecto (esto lo implemento en la clase sprite) y en la segunda línea del cuerpo del bucle intento llamar al método Refresh del formulario para que pinte nuevamente este de manera que se muestre el sprite con su nueva imagen y de la idea de animación. Es en esta línea cuando me sale el siguiente error:

Operación no válida a través de subprocesos: Se tuvo acceso al control 'Form1' desde un subproceso distinto a aquel en que lo creó

¿Es posible realizar esto en .Net? ¿Como hacerlo?
Saludos y gracias de antemano.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 18/10/2008, 09:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Respuesta: Llamada segura a subprocesos

Pude solucionarlo usando delegados. La estructura del código quedó así:

Código:
Public Class Form1

    Private sp1 As Sprite
    Private thread As New Threading.Thread(AddressOf Act)
    Delegate Sub mydelegate()
    Private del As New mydelegate(AddressOf mydelegatesub)
    
    Private Sub mydelegatesub()       
            sp1.incFrame()
            MyBase.Refresh()
    End Sub

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawImage(sp1.getCurrentImage(), New Point(20, 20))
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        thread.Start()

    End Sub

    Private Sub Act()
        sp1 = New Sprite()
        While (True)
            MyBase.Invoke(del)
        End While
    End Sub

End Class
Espero que si alguien tiene el mismo problema con esto también pueda solucionarlo.
Saludos.
__________________
Add, never Remove
  #3 (permalink)  
Antiguo 19/10/2008, 07:19
Avatar de KeiDash  
Fecha de Ingreso: septiembre-2005
Mensajes: 114
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Llamada segura a subprocesos

Programacion de videojuegos?¿ Nunca habia pensado que con .NET se hicieran juegos. ¿Es posible?

Osea, el hecho de programar si pero, se pude ahcer lo mismo que con cualquier otro lenguaje como fenix,c# ???
  #4 (permalink)  
Antiguo 19/10/2008, 09:02
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Respuesta: Llamada segura a subprocesos

El videojuego que estoy haciendo es muy simple. Es un pacman sin muchas complicaciones. Para este tipo de juegos no tiene limitaciones .Net., al menos en lo que es el desarrollo. Seguramente, el mismo juego desarrollado en otra plataforma especifica para desarrollo de videojuegos pueda tener un rendimiento más eficiente. Al menos eso supongo.
Saludos.
__________________
Add, never Remove
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:50.