codice:
Private Sub BElaborazione_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BElaborazione.Click
        thr = New Thread(New ThreadStart(AddressOf ElaboraFrame))
        If ((FinestraAnteprima.Visible = False Or FinestraAnteprima.WindowState = FormWindowState.Minimized) And FinestraNascosta.Visible = False) Then
            FinestraNascosta.Visible = True
            SetUpVideo(FinestraNascosta.PBNascosta)
        End If
        Ridimensiona(FinestraElaborazione.PBElaborazione)
        FinestraElaborazione.Enabled = True
        FinestraElaborazione.Visible = True

        thr.SetApartmentState(ApartmentState.STA)
        thr.Start()
        thr.Join()
    End Sub
Primo quel thr.Join() non ha senso messo li in quel modo perchè dopo non c'è nessun codice da elaborare.

codice:
Public Sub disegno(ByVal frame As Bitmap)
        '-- verifico se è necessario invocare
        If Me.InvokeRequired Then
            '-- se è necessario, chiamo il delegato che rimanda alla stessa sub
            Me.BeginInvoke(disegnoMD)
        Else
            '-- quì verrà eseguito il codice dal Thread Corretto
            ' Me.PBElaborazione.Image = frame
            Me.Label1.Text = "prova" '<--- qui la stringa prova viene copiata nell'oggetto textbox, ma sulla form l'oggetto Label1 non cambia! (cioè rimane con la scritta label1)
        End If
    End Sub
A me questo codice non funziona, mi ritorna 'Mancata corrispondenza del numero dei parametri'

codice:
Delegate Sub UpdateUIHandler(ByVal frame As Bitmap)

Public Sub disegno(ByVal frame As Bitmap)
        If Me.InvokeRequired Then       
            Dim handler As New UpdateUIHandler(AddressOf disegno)
            Dim args() As Object = {frame }
            Me.BeginInvoke(handler, args)
        Else      
           PBElaborazione.Image = frame   
    End Sub
Questo funziona.

Il consiglio di creare una classe con gli eventi? No??