Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [vb.net] eventi thread

  1. #1
    Si, è possibile, ma la faccenda che il metodo in questione viene eseguito in un thread diverso rispetto a quello del form complica un poco la vicenda. Spiega bene in che relazione sta la classe in questione con il form (c'è una sua istanza in un campo WithEvents del form?), e in particolare se il thread viene avviato dal form o da un altro metodo della classe.
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #2
    codice:
    Public Class NomeClasse
        Public Event NomeEvento(ByVal NomeParametro As String)
        Private Worker As New Thread(AddressOf Prova)
        '...altro...
    
        Public Sub Controllo()
            Worker.Start()
        End Sub
    
        Public Sub Prova()
            Try
                While (DoRead)
                    RaiseEvent NomeEvento(SP.ReadLine())
                End While
            Finally
                SP.Close()
                SP.Dispose()
            End Try
        End Sub
    Occhio però che nel gestire l'evento dovrai tenere conto del fatto che il tuo gestore eventi è in un altro thread rispetto al resto dell'interfaccia utente, per cui non potrai accedere direttamente ai controlli (per ulteriori informazioni, leggi questo articolo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Usa AddHandler.
    codice:
    Dim a As New NomeClasse()
    AddHandler a.NomeEvento, AddressOf Me.NomeProcedura
    a.Controllo()
    Prima della distruzione di a è comunque bene usare RemoveHandler.
    codice:
    RemoveHandler a.NomeEvento, AddressOf Me.NomeProcedura
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Certo, finché non maneggi direttamente da essa i controlli del form.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    No; dai una letta all'articolo che ti ho indicato qualche post sopra.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Originariamente inviato da trudi1990
    risolto utilizzando un synclock me ... end synclock
    I SyncLock non c'entrano niente, sono l'equivalente VB.NET delle critical sections e servono ad evitare che quella stessa porzione di codice sia eseguita in contemporanea in più thread, cosa che nel tuo caso non può avvenire. Inserire un SyncLock lì non ti mette assolutamente al riparo dai problemi di thread-unsafety dei controlli windows forms.
    e nellla form load control.checkforillegalcrossthreading=false
    No buono, così disattivi dei controlli che sono lì per un motivo preciso. Ribadisco, segui la strada indicata nell'articolo che ti ho detto.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.