# Da Real Studio a Xojo Thread

**URL:** <https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703>\
**Category:** Italiano\
**Created:** [December 11, 2020, 2:44pm UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703 "2020-12-11T14:44:12Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Luigi\_Giammarco](https://forum.xojo.com/letter_avatar_proxy/v4/letter/l/839c29/32.png) [@Luigi\_Giammarco](https://forum.xojo.com/u/Luigi_Giammarco)\
**Post date:** [December 11, 2020, 2:44pm UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/1 "2020-12-11T14:44:12Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Tim\_Parnell](https://forum.xojo.com/user_avatar/forum.xojo.com/tim_parnell/32/161_2.png) [@Tim\_Parnell](https://forum.xojo.com/u/Tim_Parnell)\
**Post date:** [December 11, 2020, 2:54pm UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/2 "2020-12-11T14:54:18Z")

</div>

`Thread.Start`  
[https://documentation.xojo.com/api/language/thread.html](https://documentation.xojo.com/api/language/thread.html)

---

<div class="post-metadata">

**Author:** ![Luigi\_Giammarco](https://forum.xojo.com/letter_avatar_proxy/v4/letter/l/839c29/32.png) [@Luigi\_Giammarco](https://forum.xojo.com/u/Luigi_Giammarco)\
**Post date:** [December 11, 2020, 3:25pm UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/3 "2020-12-11T15:25:57Z")

</div>

Ma come faccio a sapere quando il Thread Finisce ??

in real studio bastava usare " if thread1.NotRunning = 4 then "

---

<div class="post-metadata">

**Author:** ![Luigi\_Giammarco](https://forum.xojo.com/letter_avatar_proxy/v4/letter/l/839c29/32.png) [@Luigi\_Giammarco](https://forum.xojo.com/u/Luigi_Giammarco)\
**Post date:** [December 11, 2020, 3:46pm UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/4 "2020-12-11T15:46:02Z")

</div>

Non riesco a capire come farlo partire , controllarlo e vedere quando finisce un Thread in xojo

---

<div class="post-metadata">

**Author:** ![Antonio\_Rinaldi](https://forum.xojo.com/user_avatar/forum.xojo.com/antonio_rinaldi/32/331_2.png) [@Antonio\_Rinaldi](https://forum.xojo.com/u/Antonio_Rinaldi)\
**Post date:** [December 11, 2020, 6:59pm UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/5 "2020-12-11T18:59:26Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Luigi\_Giammarco](https://forum.xojo.com/letter_avatar_proxy/v4/letter/l/839c29/32.png) [@Luigi\_Giammarco](https://forum.xojo.com/u/Luigi_Giammarco)\
**Post date:** [December 12, 2020, 9:36am UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/6 "2020-12-12T09:36:23Z")

</div>

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 ??

---

<div class="post-metadata">

**Author:** ![Antonio\_Rinaldi](https://forum.xojo.com/user_avatar/forum.xojo.com/antonio_rinaldi/32/331_2.png) [@Antonio\_Rinaldi](https://forum.xojo.com/u/Antonio_Rinaldi)\
**Post date:** [December 12, 2020, 10:56am UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/7 "2020-12-12T10:56:46Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Luigi\_Giammarco](https://forum.xojo.com/letter_avatar_proxy/v4/letter/l/839c29/32.png) [@Luigi\_Giammarco](https://forum.xojo.com/u/Luigi_Giammarco)\
**Post date:** [December 12, 2020, 11:14am UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/8 "2020-12-12T11:14:17Z")

</div>

grazie Antonio , ma per capire meglio mi fai un esempio sulla riga del mio codice … scusa è solo per cpire di piu

Grazie

---

<div class="post-metadata">

**Author:** ![Antonio\_Rinaldi](https://forum.xojo.com/user_avatar/forum.xojo.com/antonio_rinaldi/32/331_2.png) [@Antonio\_Rinaldi](https://forum.xojo.com/u/Antonio_Rinaldi)\
**Post date:** [December 12, 2020, 11:50am UTC](https://forum.xojo.com/t/da-real-studio-a-xojo-thread/59703/9 "2020-12-12T11:50:05Z")

</div>

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
```
