Ok grazie pirelli72 del tuo aiuto, ma per puro caso inserendo il comando clipboard.clear() mi è sbucata fuori un'altra eccezione con la soluzione incorporata, cioè bastava settare il thread in questo modo prima di avviarlo:
visto che i thread di default sono .MTAcodice:thr.SetApartmentState(ApartmentState.STA)
Solo che ora ho un'altro problema purtroppoe cioè non riesco a visualizzare l'elaborazione nella form di output.
Io ho provato sia in maniera semplice, cioè così:
dove non mi da nessun errore, solo che quando avvio l'elaborazione mi appare la picturebox dell'elaborazione bianca, cioè come se nn avesse preso il frame.codice:Private Sub ElaboraFrame() Dim frame As Bitmap Dim bmap As Image 'copiamo l'immagine nella clipboard--- SendMessage(hWnd, WM_CAP_EDIT_COPY, 0, 0) 'prendiamo l'immagine dalla clipboard bmap = Clipboard.GetImage frame = New Bitmap(bmap) For i As Integer = 0 To frame.Height - 1 For j As Integer = 0 To frame.Width - 1 If (frame.GetPixel(j, i).R > 100 And frame.GetPixel(j, i).G > 100 And frame.GetPixel(j, i).B > 100) Then frame.SetPixel(j, i, Color.Red) End If Next Next FinestraElaborazione.PBElaborazione.Image = frame '<-- VISUALIZZAZZIONE DELL'OUTPUT thr.Abort() End Sub
Ho anche provato con un delegato creandolo nella "FinestraElaborazione" in questo modo:
Ma da lo stesso problema sempre finestra bianca, e son sicuro che nel frame sta volta c'è l'immagine perchè con un breakpoint ho verificato che l'immagine viene copiata nella variabile frame.codice:Public Class FinestraElaborazione Delegate Sub FinElabCallback(ByVal frame As Bitmap) Private Sub FinestraElaborazione_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Top = FinestraPrincipale.Top + 50 Me.Left = FinestraPrincipale.Right FinestraPrincipale.NoScala() End Sub Public Sub finelabdelegate(ByVal frame As Bitmap) If (Me.PBElaborazione.InvokeRequired) Then Dim dlg As New FinElabCallback(AddressOf finelabdelegate) Me.Invoke(dlg, frame) Else Me.PBElaborazione.Image = frame Me.PBElaborazione.Refresh() End If End Sub End Class Public Class FinestraPrincipale Private Sub ElaboraFrame() Dim frame As Bitmap Dim bmap As Image 'copiamo l'immagine nella clipboard--- SendMessage(hWnd, WM_CAP_EDIT_COPY, 0, 0) 'prendiamo l'immagine dalla clipboard bmap = Clipboard.GetImage frame = New Bitmap(bmap) For i As Integer = 0 To frame.Height - 1 For j As Integer = 0 To frame.Width - 1 If (frame.GetPixel(j, i).R > 100 And frame.GetPixel(j, i).G > 100 And frame.GetPixel(j, i).B > 100) Then frame.SetPixel(j, i, Color.Red) End If Next Next FinestraElaborazione.finelabdelegate(frame) thr.Abort() End Sub End Class
Quindi qui il problema è più serio perchè non da nessun errore, eppure l'errore c'è.![]()

, cioè bastava settare il thread in questo modo prima di avviarlo:
e cioè non riesco a visualizzare l'elaborazione nella form di output.
Rispondi quotando