Control.Invoke e "manipolazione" di controlli da thread differenti

Per l'Emoticonformatter per IMHO (del quale spero di rilasciare la versione nuova in giornata) stavo cercando di modificare una finestra (aggiungendo dei picturebox e ridimensionandola) alla fine dello scaricamento di tutte le icone.

Questa volta ho aggiunto un bel thread per gestire lo scaricamento... ma il problema era proprio qui: l'handler dell'evento che alzavo alla fine dello scaricamento veniva eseguito nel thread usato per lo scaricamento, e non nel thread che disegnava la form e dal quale era stato lanciato lo scaricamento, quindi, veniva una bella eccezione "I controlli creati su un thread non possono avere come elemento padre un controllo su un thread diverso."

Cercando su Google ho trovato un post di Eric Gunnerson che spiega come fare:

private void Current_RetrieveComplete(object sender, EventArgs e) 
{
    
if(InvokeRequired) 
    {
        Invoke(
new EventHandler(Current_RetrieveComplete), new object[] {sender, e});
    }
    
else 
    
{
      ... esegui il codice
    }
}
    
Cioè chiedi al controllo di eseguire il codice nel thread corretto... Smile

E sembra che questa ricetta dell'Invoke per chiamare la stessa funzione vada bene sempre Smile con occhiali da sole

Magari è un argomento straconosciuto a tutti, ma non lo era per me che ho sempre fatto solo web application... ogni giorno si impara qualcosa di nuovo.

Entro fine giornata sicuramente una nuova verione dell'Emoticon formatter (che ha come miglioria solo il thread separato per gestire lo scaricamento... e una bella progressbar per mostrarne l'avanzamento) compatibile con la 1.1 beta sarà rilasciata.

powered by IMHO

posted @ venerdì 24 dicembre 2004 11:01

Print

Comments on this entry:

# re: Control.Invoke e "manipolazione" di controlli da thread differenti

Left by Francesco at 17/01/2005 20:15
Gravatar
Ciao, mi chiamo Francesco ed ho incontrato anch'io la stessa eccezione riscontrata da te nell'uilizzo di un nuovo thread...
Volevo chiederti cortesemente, come applicare il metodo Invoke in .NET programmando in VB per risolvere il mio problema.
Anch'io quando faccio il DataBind alla griglia mi solleva quest'eccezione
Ti/Vi ringrazio in anticipo per l'eventuale aiuto

# re: Control.Invoke e "manipolazione" di controlli da thread differenti

Left by Simone Chiaretta at 18/01/2005 11:38
Gravatar
Ciao Francesco,
VB.NET è molto simile a C#.... non l'ho mai usato, ma vengo da Java e C, quindi "odio" VB.. e finalmente ora con C# si ha la potenza di Java e C, ma con la facilità d'uso che c'era per VB6.

Non ti scrivo il codice perchè sicuramente sbaglierei...
Comments have been closed on this topic.
«dicembre»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234