1. Man darf nicht die Event Schleife (WaitWindowEvent) unterbrechen, da sonst die GUI nicht mehr aktualisiert wird.
2. Man darf GUI-Element nicht aus Threads ändern, da diese zum Absturz führt. (Unter Windows geht es teilweise)
3. Man kann diese mit PostEvent lösen. (Siehe Modul
ThreadToGUI)
P.S. Siehe auch
Mini Thread Control
Beispiel mit Thread und PostEvent
Update 2
Code: Alles auswählen
;-TOP
Enumeration CustomEvent #PB_Event_FirstCustomValue
#MyEvent_Progress
EndEnumeration
Global thread
Procedure zaehle(*Thread.integer) ; <- Parameter Pointer auf Thread Variable
For i=0 To 100
Delay(10)
PostEvent(#MyEvent_Progress, 0, 1, 0, i)
Next
*Thread\i = 0 ; <- Eigene Thread Variable auf NULL setzen
EndProcedure
OpenWindow(0,100,100,400,200,"Test Progressbar")
ProgressBarGadget(1,50,50,250,50,0,100)
ButtonGadget(2,50,150,50,25,"klick mich")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget()=2
If EventType()=#PB_EventType_LeftClick
If Not thread
thread = CreateThread(@zaehle(), @thread) ; <- Pointer auf eigene Thread Variable übegeben
EndIf
EndIf
EndIf
Case #MyEvent_Progress
SetGadgetState(1, EventData())
EndSelect
ForEver