Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Event in Threand
Forum - C# / VB.NET - Event in Threand

Avatar
orma674 (Normal User)
Rookie


Messaggi: 55
Iscritto: 02/06/2008

Segnala al moderatore
Postato alle 0:38
Giovedì, 26/09/2013
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 il 26/09/2013 alle 0:39


Orma674 by Marcello
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 13:39
Giovedì, 26/09/2013
Dovrebbe bastare mettere la riga
Codice sorgente - presumibilmente C# / VB.NET

  1. Control.CheckForIllegalCrossThreadCalls = False


al button1_click, prima di far partire il thread
(http://msdn.microsoft.com/it-it/library/system.windows.for ...


PM Quote
Avatar
orma674 (Normal User)
Rookie


Messaggi: 55
Iscritto: 02/06/2008

Segnala al moderatore
Postato alle 13:54
Giovedì, 26/09/2013
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


Orma674 by Marcello
PM Quote