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