elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Dynamic Splash Screen
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dynamic Splash Screen  (Leído 3,636 veces)
CH4ØZ

Desconectado Desconectado

Mensajes: 108



Ver Perfil
Dynamic Splash Screen
« en: 4 Octubre 2011, 05:28 am »

Bueno el titulo dice la mitad. Estoy creando un splash screen y al tratar de hacerlo dinamico me encontre con que se crea por un hilo diferente, por lo que debia realizar los cambios mediante Invoke. Mi problema es que estos cambios se realizan desde funciones declaradas en un Modulo, por lo que no existe Me. Algun reemplazo de Me.invoke desde un modulo? o alguna otra forma de crear un splash screen dinamico?


En línea

no me juzguen si no me conocen
Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: Dynamic Splash Screen
« Respuesta #1 en: 4 Octubre 2011, 19:09 pm »

Creo haber entendido bien :xD sino aclarame más

Si el proyecto es corto y personal puedes definir Control.CheckForIllegalCrossThreadCalls como False y el ApartamentState del thread en STA para que los threads puedan tener acceso a los controles.

Si es algo más serio puedes usar siempre delegados, este ejemplo se refiere a Me

Código
  1.    Delegate Function Me_Delegate() As Form
  2.    Public Function _Me() As Form
  3.        If Me.InvokeRequired Then
  4.            Return Me.Invoke(New Me_Delegate(AddressOf _Me), New Object() {})
  5.        Else
  6.            Return Me
  7.        End If
  8.    End Function
  9.  


En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
CH4ØZ

Desconectado Desconectado

Mensajes: 108



Ver Perfil
Re: Dynamic Splash Screen
« Respuesta #2 en: 4 Octubre 2011, 20:10 pm »

mmm no termino de entender muy bien, perdona.

El tema es el siguiente. Dentro del splash screen hay un label en el cual iria acualizando el estado (ej: "cargando configuracion...", "cargando X...", etc) y una barra de proreso; mi problema inicial surge con los threads dado que el splash screen no trabaja con el mismo thread que la aplicacion (o eso entendi), por lo que termine leyendo esto. Intentando llevar esos ejemplos a mi aplicacion, me di cuenta que mi problema numero dos era como usar Me.Invoke desde el modulo donde estan las funciones (desde el que queria actualizar el splash screen)
En línea

no me juzguen si no me conocen
Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: Dynamic Splash Screen
« Respuesta #3 en: 4 Octubre 2011, 20:49 pm »

Los threads no pueden o al menos no deberian tener comunicación con los controles y esto se resuelve usando delegados como el ejemplo que te puse arriba ese ejemplo devuelve de manera segura el objeto Me. Si quieres setear el texto de un label en un thread debes hacer un delegado para eso, mira este ejemplo que acabo de escribir:

Código
  1. Public Class Form1
  2.  
  3.    Public T As New Threading.Thread(AddressOf Thread_Sub)
  4.    Public Sub Thread_Sub()
  5.        SetControlText(Label1, "Texto cambiado") 'Aqui no da error
  6.        'Label1.Text = "Texto cambiado" 'Aqui da error
  7.    End Sub
  8.  
  9.    Public Delegate Sub SetControlText_Delegate(ByVal Ctrl As Control, ByVal Text As String)
  10.    Public Sub SetControlText(ByVal Ctrl As Control, ByVal Text As String)
  11.        If Me.InvokeRequired Then
  12.            Me.Invoke(New SetControlText_Delegate(AddressOf SetControlText), New Object() {Ctrl, Text})
  13.        Else
  14.            Ctrl.Text = Text
  15.        End If
  16.    End Sub
  17.  
  18.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  19.        T.Start()
  20.    End Sub
  21.  
  22. End Class
En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
CH4ØZ

Desconectado Desconectado

Mensajes: 108



Ver Perfil
Re: Dynamic Splash Screen
« Respuesta #4 en: 4 Octubre 2011, 21:35 pm »

mientras vos respondias como no estaba mirando me puse a leer aver como lo podia solucionar, y hize un codigo con delegados pero por algun motivo no funciona correctamente.

Código
  1. 'Dentro del Splash Screen
  2.    Public Sub SplashUpdate(ByVal text As String, ByVal percent As Integer)
  3.        Label1.Text = text
  4.        ProgressBar1.Value = percent
  5.    End Sub
  6.  
  7. 'Dentro de mi modulo
  8.    Delegate Sub SplashUpdateing(ByVal text As String, ByVal percent As Integer)
  9.  
  10.    Private sstatus As String
  11.    Private svalue As Integer
  12.    Private S As New Splash
  13.    Private Method As SplashUpdateing = AddressOf S.SplashUpdate
  14.  
  15. 'Dentro de una de las funciones del modulo
  16.    sstatus = "Loading vehicles..."
  17.    Method.Invoke(sstatus, svalue)

Ahora bien revise el codigo, y el evento SplashUpdate es llamado, los parametros se pasan bien, pero el label no cambia su contenido. ¿Por Que?

(solo para saber en que falle y aprender)

EDIT: Ya me di cuenta xq no funcionaba, olvidalo y muchas gracias por el ejemplo.
« Última modificación: 4 Octubre 2011, 22:11 pm por CH4ØZ » En línea

no me juzguen si no me conocen
Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: Dynamic Splash Screen
« Respuesta #5 en: 4 Octubre 2011, 22:11 pm »

De esa forma sigues trantando el control de forma no segura, lee el ejemplo y nota la diferencia.
En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PNG Splash Screen (GDI+) « 1 2 »
Programación Visual Basic
cobein 11 4,720 Último mensaje 16 Mayo 2008, 16:50 pm
por SERBice
Mi primer "Logon Splash Screen" para web
Diseño Gráfico
Syphroot 0 3,336 Último mensaje 16 Mayo 2008, 10:01 am
por Syphroot
duda con cuenta Dynamic DNS
Redes
6cientos 4 3,327 Último mensaje 1 Julio 2011, 22:09 pm
por 6cientos
Pasar de Static Linking a Dynamic Linking. « 1 2 »
Programación C/C++
APOKLIPTICO 18 6,700 Último mensaje 9 Agosto 2012, 23:46 pm
por [Zero]
Fibonacci - Dynamic Programming.
Programación C/C++
GGZ 2 1,551 Último mensaje 22 Febrero 2017, 02:25 am
por GGZ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines