Sto portando software da real studio a Xojo , in Real studio i Thread partivano con Thread.run
ma non capisco come fare per farlo Partire da Xojo …
Gazie
Sto portando software da real studio a Xojo , in Real studio i Thread partivano con Thread.run
ma non capisco come fare per farlo Partire da Xojo …
Gazie
Ma come faccio a sapere quando il Thread Finisce ??
in real studio bastava usare " if thread1.NotRunning = 4 then "
Non riesco a capire come farlo partire , controllarlo e vedere quando finisce un Thread in xojo
detta th la tua classe thread
th.start lo avvia
per controllarlo hai ancora resume, sleep etc.
per valutarne lo stato (capire se ha finito) ThreadState
Inoltre ora hai UserInterfaceUpdate con cui puoi aggiornare l’interfaccia
Grazie Antonio ma non va
in Real Studio nel Thread io ho scritto
DIm F as Folderitem
Dim F1 as Folderitem
if FrecciaBol = false then
f=getfolderitem(Text1.text)
F1= Getfolderitem(Text2.text)
TheSync(F,F1)
else
f=getfolderitem(Text2.text)
F1= Getfolderitem(Text1.text)
TheSync(F,F1)
end
if thread1.NotRunning = 4 then
Elabora.visible= false
Flag = false
msgbox “fine”
end
lo stesso ho ripetuto new nuovo Thread in Xojo , ma non va , dove sbaglio ??
elabora.visibile e msgbox non possono essere usati nel thread.
Usa l’aggiornamento della UI con un dictionary(anche creato come sequenza di pair) tipo:
“done”:true, “msg”:fine
Nell’evento:
guardi il vettore dei dictionary, dentro ognuno guarda le chiavi (for each chiave as dictionaryEntry):
select case chiave.key.stringValue
case “done”
elabora.visibile=chiave.value.booleanValue
flag=chiave.value.booleanValue
case “msg”
messageBox chiave.value.stringValue
end select
Ripeto l’aggiornamento della UI dal thread è da molto tempo che non si può fare. Recentemente hanno inserito la possibilità di comunicare con il processo principale tramite questo evento e li puoi interagire con la UI.
grazie Antonio , ma per capire meglio mi fai un esempio sulla riga del mio codice … scusa è solo per cpire di piu
Grazie
Quello che hai postato è il tuo evento run
non va bene per tanti motivi di UI
Devi prevedere una fase in cui raccogli le variabili dalla ui per il thread prima di lanciarlo
diciamo che il thread si chiama thread1
fai un metodo nella finestra avviaThread con
path1=Text1.text
path2=text2.text
thread1.run
nel run di thread1
Dim F As Folderitem
Dim F1 As Folderitem
If FrecciaBol = False Then
f=New FolderItem(path1, FolderItem.PathModes.Native)
F1=New FolderItem(path2, FolderItem.PathModes.Native)
TheSync(F,F1)
Else
f=New FolderItem(path2, FolderItem.PathModes.Native)
F1= New FolderItem(path1, FolderItem.PathModes.Native)
TheSync(F,F1)
End
Me.AddUserInterfaceUpdate("done":True, "msg":"Finito")
Nell’evento UserInterfaceUpdate del thread1:
For Each d As Dictionary In data
For Each chiave As DictionaryEntry In d
Select Case chiave.Key.StringValue
Case "done"
elabora.visibile=False
flag=False
Case "msg"
MessageBox chiave.Value.StringValue
End Select
Next
Next