Blog Stats
  • Posts - 2
  • Articles - 0
  • Comments - 354
  • Trackbacks - 2

 

mercoledì 17 gennaio 2007

Now reading

ho intenzione di postare di volta in volta le mie letture. Ho appena iniziato "Design Patterns" della famigerata Gang of Four, dopo aver sentito parlare, cercato di utilizzare etc. design patterns, utilizzato varie fonti per comprenderli ecc. Be', leggerne direttamente da questo libro è decisamente un'altra cosa.

martedì 16 gennaio 2007

Cross-thread operation not valid

Sappiamo che nel .Net Framework è vietato l'accesso ad un controllo da un thread diverso da quello in cui il controllo stesso è stato creato. Il framework solleva una InvalidOperationException se si tenta una simile operazione. Per aggiornare (ad esempio) l'interfaccia utente con le informazioni provenienti da un thread in esecuzione in background dobbiamo utilizzare l'interfaccia ISynchronizeInvoke, come spiegato ad esempio in http://msdn2.microsoft.com/en-us/library/ms171728.aspx. Se abbiamo diverse proprietà di diversi controlli che necessitano di essere aggiornate da thread differenti, potrebbe essere oneroso definire un metodo delegato per ciascuna, un metodo che verifica la proprietà InvokeRequired e un metodo che costituisca l'istanza del delegato. Per ovviare a tutto questo possiamo utilizzare una classe che prenda nel costruttore in ISynchronizeInvoke a cui delegare le chiamate cross-thread, come ho cercato di spiegare nell'articolo: http://www.codeproject.com/useritems/ISinchronizedInvoke.asp.

 

 

Copyright © Simone Romano