Bonjour,
J'ai un problème étrange (pour moi!!) sur l'exécution d'un thread.
Le thread s'exécute pour certaines actions mais pas pour d'autre. Je viens essayé d'être bref. Je programme actuellement un DAC, une dll d'accés aux données unifiée. Je peux me connecter sur plusieurs bases (access, MySQL, PostgreSQL). Mon thread est assez simple, il ouvre une fenetre d'attente lors de l'initialisation de mon objet (connexion, récupération de certaines informations de la bdd, etc.) et se ferme à la fin de l'initialisation. Le tout est donc gérer par des événements associés à ma dll.
Lorsque j'initialise mon objet : un événement de début et de fin d'initialisation sont déclenchés.
D'où le code :
Attribution des événements :
Code de ma fonction, qui sera délégué au thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TotalConnexion.OnPreInit += newDACEventHandler(TotalConnexion_OnPreInit); TotalConnexion.OnInit += newDACEventHandler(TotalConnexion_OnInit); TotalConnexion.OnFinInit += newDACEventHandler(TotalConnexion_OnFinInit);
Code correspondant aux événements :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 privatevoid MonAttente() { MaFenetreAttente = newXtraUserControlAttente(this.textEditNomBdd.Text); XtraForm MaFenetreReception = newXtraForm(); MaFenetreReception.AutoSize = true; MaFenetreReception.AutoSizeMode = AutoSizeMode.GrowAndShrink; MaFenetreReception.Text = "Connexion distante..."; MaFenetreReception.FormBorderStyle = FormBorderStyle.FixedToolWindow; MaFenetreAttente.Parent = MaFenetreReception; MaFenetreReception.StartPosition = FormStartPosition.CenterParent; MaFenetreReception.ShowDialog(); MaFenetreReception.Refresh(); }
Ce code marche losque je me connecte à ma base access en local (la fenetre décrite dans "MonAttente()" s'affiche), mais ne marche pas pour MySQL et PostgreSQL (sur serveur distant). Pourtant, lors du débuggage, toutes les fonctions ci-dessus sont exécutées (notament MonThread.Start()). La fenêtre ne s'affiche pas malgré tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 privatevoid TotalConnexion_OnPreInit(object sender, EvenementDAC ev) { MonThread = newThread(newThreadStart(MonAttente)); MonThread.Start(); // MaFenetreAttente.label1.Text = "Preinit"; } privatevoid TotalConnexion_OnInit(object sender, EvenementDAC ev) { // MaFenetreAttente.label1.Text = "OnInit"; } privatevoid TotalConnexion_OnFinInit(object sender, EvenementDAC ev) { // MaFenetreAttente.label1.Text = "Fin"; MonThread.Abort(); }
Si vous avez une idée, ou si vous souhaitez des précisions sur mon code, n'hésitez pas.
Merci d'avance à la communauté Developper.com
Bisounux.
Partager