j'aimerais "désincarcérer" le thread (l'enlever quoi) de ce code :
Code : Tout sélectionner
Enumeration
#MainForm
#StartStop
#ListFolder
#CountFiles
EndEnumeration
Global CountFiles.i
Global Chemin$ = PathRequester("Répertoire a scanner", GetUserDirectory(#PB_Directory_Desktop))
Global nb=10000
Global Dim dossier$(nb)
Global dossier
Global Dim name$(nb)
Global name
Global Dim taille.q(nb)
Global Dim contenu.q(nb)
Global test_vide=0
;Parcourir un dossier (Fonction recurssive by Flype il me semble)
Procedure.s ParseDirectory(folder.s, id.l = 0)
If Right(folder, 1) <> "\"
folder + "\"
EndIf
If ExamineDirectory(id, folder, "*.*")
While NextDirectoryEntry(id) And GetGadgetData(#StartStop)=#True
If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
AddGadgetItem(#ListFolder,-1, folder +Chr(10)+DirectoryEntryName(id))
;Debug folder
countFiles+1
SetGadgetText(#CountFiles, Str(CountFiles))
If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
dossier+1
If dossier>=nb
Debug "trop court (dossier)": End
EndIf
dossier$(dossier)=folder + DirectoryEntryName(id)+"\"
Debug dossier$(dossier)
ParseDirectory(folder + DirectoryEntryName(id), id + 1)
Else
name+1
If name>=nb
Debug "trop court (name)": End
EndIf
name$(name)=folder + DirectoryEntryName(id)
test_vide=0
Debug ">> "+name$(name)
EndIf
EndIf
Wend
FinishDirectory(id)
EndIf
EndProcedure
Procedure StartThread(*Value)
ClearGadgetItems(#ListFolder)
CountFiles=0
ParseDirectory(Chemin$)
While GetGadgetData(#StartStop)=#True
Wend
EndProcedure
Procedure MainFormShow()
OpenWindow(#MainForm,0,0,800,600,"Lecture d'un dossier(Thread)",#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
TextGadget(#PB_Any, 10, 10, 50, 20, "Fichier(s)")
TextGadget(#CountFiles, 100, 10, 80, 20, "0")
ListIconGadget(#ListFolder, 10, 30, 780,530, "Dossier", 380)
AddGadgetColumn(#ListFolder, 1, "Fichier",390)
ButtonGadget(#StartStop, 10, 570, 780, 20, "Start/Stop")
EndProcedure
MainFormShow()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #StartStop
If GetGadgetData(#StartStop)=#False
SetGadgetData(#StartStop, #True) ;Indiquer au bouton qu'il est actif
tread=CreateThread(@StartThread(), 0)
Else
SetGadgetData(#StartStop, #False)
EndIf
EndSelect
Case #PB_Event_SizeWindow
WWidth=WindowWidth(#MainForm)
Wheight=WindowHeight(#MainForm)
ResizeGadget(#ListFolder, #PB_Ignore, #PB_Ignore , WWidth-10, Wheight-75)
ResizeGadget(#StartStop, (WWidth/2)-35, Wheight-30 , #PB_Ignore, #PB_Ignore)
Case #PB_Event_CloseWindow
If tread<>0
KillThread(tread)
EndIf
For i=1 To actu
Debug "=> "+name$(i)+ " : "+taille(i)
Next
Debug("......")
Debug "dossier = "+Str(dossier)
Debug "name = "+Str(name)
End
EndSelect
ForEver