Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [vb .net] utilizzo dei thread

    salve a tutti. ultimamente sto cercando di capirci qualcosa sull'utilizzo dei thread in vb .net con pochi risultati. non riesco a capire come interagire all'interno del thread creato con i componenti del form base. e non capisco nemmeno perché le operazioni sulle stringhe (instrrev) facciano andare in eccezione il thread e quindi forzano l'abort. per costruirlo ho seguito le istruzioni del msdn corrette con consigli trovati in rete, cioè:
    Codice PHP:
    Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button3.Click
    trd 
    = New Thread(AddressOf ThreadTask)
    trd.IsBackground True
    trd
    .Start()
    End Sub

    Private Sub ThreadTask()
    [...]
    formato Mid(nomeOInStrRev(nomeO".") + 1)
    newFileG(0) = dirG "/" nomeO
    newFileG
    (1) = prima pag dopo "." formato
    AccessControl
    ()
    [...]
    End Sub

    Private Sub AccessControl()
    If 
    Me.InvokeRequired Then
    Me
    .Invoke(New MethodInvoker(AddressOf AccessControl))
    Else
    My.Computer.FileSystem.RenameFile(newFileG(0), newFileG(1))
    End If
    End Sub 
    ah già, all'inizio usavo accesscontrol che effettivamente veniva richiamato però non entrava mai nell'else e quando entrava nell'invoke sollevava un'eccezione e terminava il thread.
    mi sapete aiutare? grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Difficile risponderti perché

    1) non hai fornito dettagli dell'eccezione

    2) non si sa cosa sia nomeO né quale sia il suo valore quando il thread parte
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    premetto che il codice è praticamente lo stesso prima che lo mettessi nel thread e funzionava.
    allora, quando esegue l'instrev mi scrive nella finestra di controllo immediato
    codice:
    Esegui istruzione: esecuzione di istruzione/routine del codice non utente 'Microsoft.VisualBasic.CompilerServices.Operators.CompareString'
    Eccezione first-chance di tipo 'System.Threading.ThreadAbortException' in Rinomina files.exe
    Eccezione di tipo 'System.Threading.ThreadAbortException' in Rinomina files.exe non gestita nel codice utente
    Esegui istruzione: esecuzione di istruzione/routine del codice non utente 'System.Threading.ExecutionContext.RunInternal'
    nomeO è una stringa sicuramente non vuota, è il "nome.estensione" di un file preso da un arraylist precedentemente popolato fuori dal thread

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Eccezione di tipo 'System.Threading.ThreadAbortException' in Rinomina files.exe non gestita nel codice utente

    Controlla la innerException.
    Hai un metodo Rinomina da qualche parte?

  5. #5
    "Rinomina files.exe" è l'eseguibile del progetto, non ho metodi di nome rinomina
    in che senso devo controllare la innerexception?
    se faccio un try catch dove controllo la innerexception penso di non risolvere niente o sbaglio?

  6. #6
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Quella dovrebbe essere una eccezione generica del thread, che nasconde al suo interno la vera eccezione generata.
    L'eccezione dovrebbe avere una proprietà che si chiama innerException che restituisce a sua volta un eccezione.

  7. #7
    non capisco però da cosa potrebbe essere causata questa eccezione e come risolverla perché viene generata anche per
    Me.Invoke(New MethodInvoker(AddressOf AccessControl))
    all'interno del metodo di accesscontrol

  8. #8
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Originariamente inviato da Ripper_92
    non capisco però da cosa potrebbe essere causata questa eccezione e come risolverla perché viene generata anche per
    Me.Invoke(New MethodInvoker(AddressOf AccessControl))
    all'interno del metodo di accesscontrol
    L'unico modo è leggere la vera eccezione come scritto prima.
    (ma penso di sapere cosa sia)

  9. #9
    ho fatto un try-catch per catturare l'eccezione e mi solleva (preso dalle proprietà manualmente in debug della variabile d'eccezione)
    System.Threading.ThreadAbortException = {Impossibile valutare l'espressione.}
    _message = "Thread interrotto."
    ora, possibilmente evitando di parlare per indovinelli, cosa pensi sia?
    prima di iniziare questo topic sapevo che c'era il problema che il metodo del thread non può leggere/scrivere sugli oggetti del form e di ovviare questa cosa usando dei metodi ausiliari. però si è rivelata una patacca perché lo stesso errore viene sollevato anche nel metodo che non centra col thread.

  10. #10
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Scrivi cos':
    codice:
    Try
    
        ''il codice richiamato dal thread
    
    Catch e As ThreadAbortException
             Console.WriteLine("ThreadAbortException")
             Console.WriteLine("Eccezione: {0}", e.Message)
             if not e.innerexception is nothing then Console.WriteLine("INNERex: {0}", e.innerexception.Message)
             Thread.ResetAbort()
    Catch e as exception
               Console.WriteLine("Eccezione generica!")
    End Try

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 © 2026 vBulletin Solutions, Inc. All rights reserved.