Boucle en parallèle de l'exécution du code
Bonjour, voilà mon petit problème :
J'ai une form1, et pour valider les infos dans ma form et génerer un rapport, je clique sur un bouton, le bouton générer comme sur la photo ci-dessous :
http://img203.imageshack.us/img203/8722/screen1mt.png
Une fois que je clique sur mon bouton générer, la form1 se ferme et une form2 apparaît, avec une picturebox comportant une image.gif, qui est censé être animée. Cette form2 est une form "d'attente", qui est censé être affiché pendant la génération du tableau de bord, comme l'image ci-dessous :
Attention il ne s'agit pas d'une progressbar malgrès le nom de la form2
http://img706.imageshack.us/img706/6140/screen2oc.png
Et donc pendant que cette form est affichée, derrière je veux que mon code s'éxécute, et quand il a fini, ma form2 se ferme et uen form3 affiche mon tableau d ebord. Aucun souci à ce niveau là cela fonctionne, mais le seul problème c'est qu'il faut "chainrefresh" la form2 ou la picturebox de la form2 contenant l'image.gif, pour que le mouvement s'effectue, c'est là que vient mon problème.
J'ai essayé avec du doevent, ou du while mais ce n'est pas adapté.
Voici le code de mon bouton "générer" :
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| Public Sub Btgenerer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btgenerer.Click
Dim msg, title As String
Dim style As MsgBoxStyle
Dim response As MsgBoxResult
'Si aucune date n'a été rentrée, on ne peut continuer, messagebox d'erreur
If Txtboxcal.Text = "" Then
msg = "Vous n'avez pas sélectionné la date à considérée." ' définit le message
style = MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly Or MsgBoxStyle.SystemModal 'définit le style
title = "Erreur" ' définit le titre
response = MsgBox(msg, style, title)
GoTo toto
End If
'Gestion de l'affichage
Me.Hide()
Menu_principal.Refresh()
Progressbar.pict1.Size = New Size(69, 66) '30,30
Progressbar.pict1.Location = New Point(100, 70) '83 height
Progressbar.pict1.Image = My.Resources.testbis
Progressbar.Label2.Text = "Génération en cours"
Progressbar.Text = "Génération du tableau de bord"
Progressbar.Show()
Progressbar.refresh()
'Copie des rapports dans des tables
Call CopieRapports()
'Cherche les positions des balises début, fin et absence dans le tableau contenant
'le rapport
Call RechercheBalises()
'Extraction 1
Call sub1()
Call sub2()
Call sub3()
Call sub4()
Call sub5()
Call sub6()
Call sub7()
'Extraction 2
Call ExtractionActivity()
Call ExtractionTaskMean()
Call ExtractionMean()
Call CreateTableWeek()
Call UpdateTableActivity()
Call CreateTM()
Call BudgetConsomé()
Call BudgetSemaine()
'Génération du Tableau de bord
Call Menu_principal.Datagrid1Load()
Call Menu_principal.treeview(Menu_principal.Datagrid1, TableActivity, "+", My.Resources.pluss)
Call Menu_principal.graphbar()
Call Menu_principal.Datagrid2Load()
Call Menu_principal.Datagrid3Load()
Call Menu_principal.Datagrid4Load()
'Lancement de la phase Calcul
Call Calc_affich_nb_os_chef_total()
Call Calc_affich_fourn_sstait_total()
Call Calcul_affich_nb_materiel_total()
Call Feuxetcouleurs()
'On ferme la progressbar
Progressbar.Hide()
toto:
End Sub |
En gros moi je veux un truc du genre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 'Gestion de l'affichage
Me.Hide()
Menu_principal.Refresh()
Progressbar.pict1.Size = New Size(69, 66) '30,30
Progressbar.pict1.Location = New Point(100, 70) '83 height
Progressbar.pict1.Image = My.Resources.testbis
Progressbar.Label2.Text = "Génération en cours"
Progressbar.Text = "Génération du tableau de bord"
Progressbar.Show()
Progressbar.refresh()
'Tant que ma form2 est ouverte, refresh ma form2.pict1
While Progressbar.visible = true
Progressbar.pict1.refresh
End While
'On execécute tous mes sub
Call mysubs()
'On ferme la progressbar
Progressbar.Hide() |
OU encore :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 'Tant que ma form2 est ouverte, refresh ma form2
dim x as integer = 1
While x = 1
Progressbar.pict1.refresh
End While
'On execécute tous mes sub
Call mysubs()
'Fin de ma boucle
x = 2
'On ferme la progressbar
Progressbar.Hide() |
Je sais bien que en faisant une boucle while comme je l'ai faite, ma boucle est infinie, donc y a-t-il moyen de lancer une boucle, puis que le sub continue d'exécuter le code situé après, et que quand il rencontre une condition définie dans ma boucle, il arrête la boucle.
Il faut sans doute recoller le Call mysubs() dans la boucle while avec un doevents et ma condition après le Call mysubs() ?
J'espère m'être fait comprendre, merci de vos réponses.