Oppure

Loading
25/09/13 22:38
orma674
Buonasera a tutti, avrei bisogno di una mano nel risolvere questo mio problema.
Ho scritto un contatore che usa un Thrend in una classe.

Il programma è cosi strutturato

Public Class Form1
Dim WithEvents cls As New Class1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
cls.Thread_Start()
End Sub

Private Sub cls_xxx(ByVal count As Integer) Handles cls.xxx
Me.Text = cls.prop
End Sub
End Class

Public Class Class1
Dim thread As System.Threading.Thread

Event xxx(ByVal count As Integer)

Private Delegate Sub StampaDelegato(ByVal val As Integer)

Public Sub Thread_Start()
PuntatoreFunzione = New StampaDelegato(AddressOf Stampa)
thread = New System.Threading.Thread(AddressOf BackgroundProcess)
thread.Start()
End Sub

Private Sub Stampa(ByVal val As Integer)
RaiseEvent xxx(value)
End Sub

Private Sub BackgroundProcess()
Dim I As Integer

Do While True
I += 1
Stampa(I)
Loop
End Sub

End Class

Questo da errore Cross nel passaggio dati al form in quanto generati da un Thrend differente.
Come faccio a passare i dati dell'evento sul form?

Grazie per la collaborazione
Marcello
Ultima modifica effettuata da orma674 25/09/13 22:39
aaa
26/09/13 11:39
GN
Dovrebbe bastare mettere la riga
Control.CheckForIllegalCrossThreadCalls = False

al button1_click, prima di far partire il thread
(msdn.microsoft.com/it-it/library/…)
aaa
26/09/13 11:54
orma674
Grazie per la risposta, utilissima!!!!

Intanto avevo provato ad aggirare il controllo in questo in un altro modo.

Public Class cThread
Public gThread As New System.Threading.Thread(AddressOf cThread_Process)
Public fThread As dThread = New dThread(AddressOf Stampa)
Public Delegate Sub dThread(ByVal vString As String)
Private Event tThread_Event(ByVal vString As String)
Public Event eThread_Event(ByVal vString As String)

Public gCount As Integer
Public gControl As Boolean
Public gSender As Object

Public Sub cThread_Process(ByVal vSender As Object)
Do Until gControl = False
gCount = gCount + 1
Stampa(gCount)
Loop
End Sub

Public Sub cThread_Start(ByVal vSender As Object)
gSender = vSender
gControl = True
gThread.Start()
End Sub

Public Sub cThread_Stop(ByVal vSender As Object)
gControl = False
gThread.Abort()
End Sub

Public Sub Stampa(ByVal Val As String)
RaiseEvent tThread_Event(Val)
End Sub

Private Sub mThread_Event(ByVal Val As String) Handles Me.tThread_Event
If gSender.InvokeRequired Then
gSender.Invoke(fThread, Val.ToString)
Else
RaiseEvent eThread_Event(Val)
End If
End Sub
End Class

Sul form ovviamente la ricezione dell'evento la quale non da errore.

La mia domanda è la seguente:
Quale delle due cose è più corretto al fine di assottigliare i tempi di calcolo del Thrend?

Grazie per la collaborazione
Marcello
aaa