Oppure

Loading
05/02/11 18:41
Buongiorno,
Sto lavorando su un controllo TreeView in un thread separato,
quando eseguo questa riga di codice
twFiles.Nodes.Add(Me.Server.URI.ToString)

Mi lancia un'eccezione di tipo InvalidOperationException con la seguente descrizione:

L'azione da eseguire sul controllo è stata chiamata dal thread sbagliato. Per eseguire l'operazione, è necessario eseguire il marshalling del thread appropriato, utilizzando Control.Invoke o Control.BeginInvoke.

Non ho capito cosa devo fare per risolverla, e sinceramente nemmeno da cosa è causata :asd:
Qualcuno mi può aiutare?

Ciao e grazie a chi mi risponderà:k:

Qwertj

EDIT: Ho provato il codice di HeDo, ma mi ridà lo stesso identico errore nella stessa riga. Questo è il codice
Delegate Sub DelTwFiles(ByVal Node As TreeNode)

    Private Sub TwFilesSub(ByVal Node As TreeNode)
        If twFiles.InvokeRequired Then
            twFiles.Invoke(New DelTwFiles(AddressOf TwFilesSub), Node)
        End If
    End Sub

Ho sbagliato qualcosa?
Ultima modifica effettuata da 06/02/11 8:53
05/02/11 22:19
walker93
In poche parole, non puoi modificare controlli e proprietà dei controlli di un form da un thread che non è quello che ha "lanciato" il form.
Es.

Il thread "A" ha lanciato il form e lo gestisce, con il Thread "B" creato dal BackGroundWorker NON puoi modificare la Form e i suoi controlli, DEVI usare per forza il Thread "A"...
aaa
05/02/11 23:58
HeDo
ogni oggetto GUI può essere modificato solo dal thread in cui è venuta la sua creazione. detto questo, un workaround è quello di passare per un metodo helper che fa uso di un delegate per schedulare l'azione sulla proprietà.
Il codice è molto più semplice :D


delegate void SetTextDelegate(string Text);
void SetText(string Text) {
    if (txtBox.InvokeRequired) 
        txtBox.Invoke(new SetTextDelegate(SetText), Text);
    else
        txtBox.Text = Text;
}



questo è un metodo helper che permette di modificare il testo di una textbox di nome "txtBox" da qualsiasi thread.

Lo stesso principio è applicabile a tutte le proprietà/metodi di tutti i controlli, basta solo scriversi gli appositi helpers.
Ultima modifica effettuata da HeDo 05/02/11 23:58
aaa