Pb affichage Splashscreen
Bonjour,
Voilà un sujet classique où l'on trouve pas mal de pistes sur internet.
Il s'agit de lancer une appli via un splashscreen, mais de mettre à jour dans un label de ce Splash le % d'avancement de l'initialisation.
J'ai presque réussi à mes fins grâce à des recherches sur le NET.
Le label en question se met bien à jour et les valeurs affichées sont conformes.
Le seul pb, c'est que les autres labels de mon splashscreen (qui pour l'instant est assez rudimentaire), statiques quant à eux et définis dans la procédure Load sont gelés. Malheureusement je n'ai pas réussi à prendre de capture d'écran mais l'affichage de ces autres labels prend la forme d'un rectangle blanc.
Je précise que mon appli est de type WinForms mais démarre sur un sub Main, si bien que le paramètre "Activer l'infrastructure d'application" est désactivé.
Voici mon code :
Pour le splash :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Public NotInheritable Class Form_Splash
Private Delegate Sub SetTextCallback(ByVal [text] As String)
Public Sub SetText(ByVal [text] As String)
If Me.LB_Progression.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.LB_Progression.Text = [text]
Me.LB_Progression.Refresh()
End If
End Sub
Private Sub Form_Splash_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If My.Application.Info.Title <> "" Then
ApplicationTitle.Text = My.Application.Info.Title
Else
ApplicationTitle.Text = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName)
End If
Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, My.Application.Info.Version.Minor, My.Application.Info.Version.Build, My.Application.Info.Version.Revision)
Copyright.Text = My.Application.Info.Copyright
End Sub
End Class |
Pour la sub main()
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Module General
Private splash As Form_Splash
Public Sub Main()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
splash = New Form_Splash
...
splash.Show()
If InitialiseDB() Then
...
End Sub
Function InitialiseDB() As Boolean
Try
splash.SetText("Recherche base de données existante")
... |
Bref, il doit y avoir un pb de refresh ou c'est la fonction Show qui pose pb (mais je ne peux pas mettre ShowDialog, sinon le reste de la procédure n'est pas lue)
Je ne pense pas que mon pb d'affichage soit lié à la solution mise en oeuvre pour envoyer au Splash les infos concernant la progression de l'initialisation, mais je n'en suis pas sûr non plus.
Par ailleurs, j'ai un petit soucis secondaire. Je souhaiterais appliquer l'astuce du tuto de P. Lasserre pour spécifier un MinimumSplashScreenDisplayTime (§ X-A-3) mais la propriété My.Application.MinimumSplashScreenDisplayTime justement parce que le paramètre "Activer l'infrastructure d'application" est désactivé et que je n'ai donc pas pu spécifier le SplashScreen dans les propriétés du projet.
Merci de votre aide.