JavascriptProva

sabato 31 agosto 2013

Prima applicazione con i thread.

Il tutorial dice di importare System.threading.
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