Da Real Studio a Xojo Thread

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

Thread.Start
https://documentation.xojo.com/api/language/thread.html

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