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...
E sembra che questa ricetta dell'Invoke per chiamare la stessa
funzione vada bene sempre
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