Effectivement, il semblerait que le splashscreen soit exécuté dans thread séparé du thread principal. Pour des raisons de stabilité de l'application, l'appel à des controles d'un écran exécuté dans un thread différent est interdit. Il faut passer par un délégué
En analysant l'exemple donné dans l'aide proposée par l'écran de l'exception, on peut en déduire ceci :
Dans ton écran SplashScreen tu rajoute le code ci-dessous :
Delegate Sub SetTextCallback(ByVal [text] As String)
Public Sub SetText(ByVal [text] As String)
' InvokeRequired required compares the thread ID of the
' calling thread to the thread ID of the creating thread.
' If these threads are different, it returns true.
If Me.Label.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.Label.Text = [text]
End If
End Sub
Dans ton écran principal, lorsque tu veux modifier le text du splashscreen tu vas, maintenant, simplement faire :
SplashScreen.SetText("Chargement ...")
Le principe :
Tu appelle la fonction SetText dans le même thread que ton écran principal. Celle-ci va tester si elle peut acceder directement à ton contrôle (InvokeRequired). A priori, elle ne pourra pas pas. Elle va donc créer un délégué (SetTextCallback) sur la fonction SetText du thread de l'écran SplashScreen et ainsi, à travers le délégué, appeler (Me.Invoke) cette fonction
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i