Bonjour
J'ai dans une DLL un object possédant un thread linéaire.
Je veux dire un traitement successif sans boucle. Si une erreur est rencontrée on quitte, si le thread arrive à la fin il doit s’arrêter.
Afin de contrôler les erreurs toutes les instructions sont englobées dans un try catch.
j'utilise cette DLL dans un projet winform ou je peut creer plusieurs de ces object et lancer le thread de chacun en parrallele.
pour etre sure que tous mes thread sont terminés, j'ajoute a mon thread principal un join de chacun.
En exécutant ce code, tout les thread fonctionnent et je n'ai jamais d'exception levée. Je continue donc ce code dans la fonction DisposeAll Reader().
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
18
19
20
21
22 private void flashReaders() { if (nbReadertoFlash > 0) { nbReaderFlashed = nbReadertoFlash; foreach (reader rd in readerList) { if (rd.needFirmwareUpdate) { rd.theReader.FlashFirmware(rd.firmwarePath); System.Threading.Thread.Sleep(100); rd.theReader.flashThread.Join(); } } } else { DisposeAllreader(); } }
Cette fonction me permet de détruire tout mes object et de lancer le Close() de la fenêtre.En testant les thread utilisés pour chacun des object, il en restant des alive ???? bien que je notifie bien que je suis sortie de ce thread et que j'ai passé les join.
Si j'essaye un abort, l'app freeze sans erreur. Sans l'abort avec le bloc try catch dans le thread , le debugger me renvoi un erreur inter thread de la form ?
Je ne vois pas pourquoi le thread est toujours alive.
Je ne comprend pas pourquoi le message renvoyé et un probleme inter thread alors que j'utilise une textbox de la form avec un .invoke.
Si vous avez une piste je suis preneur
Cordialement
Partager