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:
codice:
thr.SetApartmentState(ApartmentState.STA)
visto che i thread di default sono .MTA
Solo che ora ho un'altro problema purtroppo
e cioè non riesco a visualizzare l'elaborazione nella form di output.
Io ho provato sia in maniera semplice, cioè così:
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
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.
Ho anche provato con un delegato creandolo nella "FinestraElaborazione" in questo modo:
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
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.
Quindi qui il problema è più serio perchè non da nessun errore, eppure l'errore c'è.