L'ho già fatto impostando i riferimenti, non da codice, dunque: dovrebbe essere la stessa cosa.
Ora dichiariamo il thread, nella sezione proprietà del form...
Public Class Form1
Private mioThread As Thread
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("questo è il thread principale")
End Sub
End Class
Dopo la dichiarazione, l'istanziazione del thread con l'istruzione New.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
mioThread = New Thread(AddressOf CompitoDelThread)
mioThread.IsBackground = True
mioThread.Start()
End Sub
che fa riferimento al "compito del thread", una semplice Sub aggiunta alla classe Form1:
Private Sub CompitoDelThread()
Dim contatore As Integer = 0
Do
If contatore > 10 Then
MsgBox("arrivato!")
End If
contatore = contatore + 1
Thread.Sleep(1000)
Loop
End Sub
Ed ecco: dopo 10 secondi, quando il valore del numero che ho predisposto nel "compito del thread" ha raggiunto l'opportuno valore, arriva la seconda MessageBox.
in pratica, funziona!
Una simpatica variante, mescolando le nozioni che ho ripassato sulla sintesi vocale, facendosi avvertire dalla voce della bella Silviotta ("ScanSoft Silvia_Dri40_16kHz") quando il numero aumentato in sottofondo dal mio secondo thread raggiunge il valore voluto:
Public Class Form1
Private voce As New SpeechSynthesizer
Private mioThread As Thread
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
voce.SelectVoice("ScanSoft Silvia_Dri40_16kHz")
mioThread = New Thread(AddressOf CompitoDelThread)
mioThread.IsBackground = True
mioThread.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("questo è il thread principale")
End Sub
Private Sub CompitoDelThread()
Dim contatore As Integer = 0
Do
If contatore > 20 Then
voce.Speak("Siamo arrivati al numero giusto, stronzo!")
End If
contatore = contatore + 1
Thread.Sleep(1000)
Loop
End Sub
End Class
...e funziona ancora!
Nessun commento:
Posta un commento