Salut !
Je dois charger des arborescences de +/- 15000 items à partir d'une DB. Pour ce faire je charge chaque arborescence dans un TTreeView, afin de profiter de ses fonctionnalité (celui-ci n'est jamais affiché, juste utilisé pour la navigation). J'ai donc créé une TList de TTreeView que je viens peupler au démarrage de l'appli.
J'utilise un Thread pour cela, afin que l'utilisateur puisse garder la main sur le soft pendant le chargement (+/- 2 minutes) - Le temps de se loguer etc... on gagne un peu de temps ...
J'ai 2 problemes (tres liés a mon avis )
1°) Je ne rentre jamais dans ma procedure OnTerminate
2°) Le thread s'execute au démarrage du programme mais ne rends jamais la main à l'utilisateur, donc ca bloque et mon Thread ne sert a rien en plus comme il ne se termine pas ...
J'ai lu quelques tutos sur ce site mais n'ai pas trouvé l'info ...
Voici un peu de code :
Merci pour votre aide
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
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 type TChapterLoader = class(TThread) private { Déclarations privées } Procedure MakeTree(ChapterID : Integer; tvwChapterTree : TTreeView); ... procedure OnTerminateProcedure(Sender : TObject); protected procedure Execute; override; public ThreadTerminated : Boolean; constructor Create(Suspended: Boolean); end; constructor TChapterLoader.Create(Suspended : Boolean); Begin FreeOnTerminate := True; inherited Create(Suspended); Priority := tpHigher; VirForm := TForm.Create(frmMain);<- form que je créé uniquement pour que le composant ait un parent OnTerminate := OnTerminateProcedure; end; procedure TChapterLoader.Execute; var i : Integer; NewTreeView : TTreeview; begin { Placez le code du thread ici } FillStrListWithChapters(CHAPTER_LIST); <- stringlist utile dans mon prog... ThreadTerminated := False; for i := 0 to CHAPTER_LIST.Count - 1 do Begin NewTreeView := TTreeview.Create(VirForm); NewTreeView.Parent := TWinControl(VirForm); Self.MakeTree(Integer(CHAPTER_LIST.Objects[i]), NewTreeView); <-appel de fonction récursive pour l''arborescence... CHAPTER_TVW_LIST.Add(Pointer(NewTreeView)); <- Ajout de mon TTreeView dans ma TList End; end; // Ne rentre jamais dans cette fonction !!!! :( procedure TChapterLoader.OnTerminateProcedure(Sender : TObject); Begin ThreadTerminated := True; End;
Partager