Salut
Je travaille sur une appli dont une partie du traitement commence à prendre pas mal de temps de traitement. Pour éviter l'énervement et l'inquiétude des futurs utilisateurs, j'ai créé un formulaire d'attente (FormAttente) avec une jolie animation et j'ai déplacé le traitement long dans un backgroundworker.
Je déclare mon formulaire d'attente de la manière suivante:
il est déclaré de manière "globale" car comme on peut le voir ci-après, je le lance dans une SUB et l'arrête dans une autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Friend FormAtt As New FormAttente
Dans la SUB associée au bouton Exécuter de mon formulaire:
- un petit peu de traitement
- le lancement de mon formulaire d'attente
- la préparation de données pour mon backgroundworker
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ' Affichage du formulaire d'attente FormAtt.Show()
- le lancement de mon backgroundworker
Dans la SUB liée à la fin de mon backgroundworker (le _RunWorkerCompleted):
- la récupération du traitement de mon backgroundworker
- la fermeture de mon formulaire d'attente
Tout cela marche super bien lors du premier lancement du bouton Exécuter, mais je veux que l'on puisse relancer le traitement avec d'autres données d'entrée sans arrêter/relancer le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ' Fermeture du formulaire d'attente FormAtt.Close()
Il s'avère que si on réactive le traitement, j'ai une erreur au moment de l'ouverture du formulaire d'attente qui me signaleJe pense que mon problème vient du fait que le FormAtt.Close est plus ou moins l'équivalent de FormAtt = nothing. Du coup je ne vois pas trop comment m'en sortir.Impossible d'accéder à un objet supprimé
J'ai bien essayé un FormAtt.Hide, mais je ne réussi pas a trouver l'événement associé dans le formulaire d'attente, du coup cela me pose des problèmes avec les Timer qui me servent pour l'animation que je ne sais pas réinitialiser lorsque je refais le FormAtt.Show.
Quelqu'un a une idée?
Merci
Partager