Vb6.0 ActiveX Exe (Faire un calul long dans un 2ieme theads) [Résolu]

Signaler
Messages postés
4
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
4 février 2007
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Bonjour, Voici mon problème!!!

Langage Visual Basic 6.0 avec Access 2000

J'ai un calcul qui prend plusieurs secondes à s'effectuer. Je ne veut pas que l'écran soit gelé et que l'utilisateur soit oubliger d'attendre la fin du calcul pour continuer... La solution que j'ai trouvé est de créer un ActiveX EXE pour effectuer le calcul dans un autre thread. Donc voilà le code

**Je suis sur un interface "frmQuestionUtilisateur" qui est vbmodal par dessus ma fenete MDI et j'ai un bouton sur ma fenetre "frmQuestionUtilisateur" pour fermer la fenêtre et activer mon timer qui est situé sur mon MDI

**voici le code pour sur le timer

Private Sub TimerCalcul_Materiel_Timer()
Calcul_Des_Pieces
TimerCalcul_Materiel.Enabled = False
End Sub

**Calcul_Des_Pieces est une fonction que j'ai créer dans un module (.bas)

Public Function Calcul_Des_Pieces()

Dim Travail_Long As Object

Set Travail_Long = CreateObject("actX_Travail_long.clsCalcul_des_Pieces")
Chaine = Travail_Long.Calcul_Pieces_Mem(TabTypeExtrusionUserMemoire_M, TabVariableUserMemoire_M, TabProprieteMemoire_M, TabPiecesMemoire_M, TabVariable_frmP_Actuel_M)
Set Travail_Long = Nothing

End Function

**Calcul_Pieces_Mem est une fonction dans mon activeX EXE

**Le calcul ce fait très bien dans mon activeX mais lorsque je click à l'écran j'obtien un message

**Il faut que je fasse retry pour que le calcul se termine que je puisse continuer.. finalement je dois attendre quand même

**Je dois spécifier que ma fonction qui est situé dans mon activeX Exe "Calcul_Pieces_Mem" appel des fonctions qui sont dans des modules(.bas)

Si jamais vous connaissez une autre manière pour travailler en multi-thread, je n'ai aucune objection à changer de method...

Merci beaucoup!

Mathieu

1 réponse

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
122
Passer par un ActiveX pour éviter de geler l'interface utilisateur, c'est barbarre !

Il te suffit juste de mettre des DoEvents dans la procédure
Calcul_Pieces_Mem (que tu peux remettre dans ton projet normal du coup) afin d'éviter de geler l'interface tout simplement.