Stamane, girovagando all'interno del framework come mi capita spesso, in compagnia del fido Reflector, mi sono imbattuto in un paio di classi che non sapevo facessero parte di Silverlight 2.0. Di AsyncOperationManager e AsyncOperation avevo già letto, ma non avevo mai pensato di poterle sfruttare nel plugin per sincronizzare un thread di download e la user interface. Un rapido refactoring mi ha infine confermato che la tecnica funziona e anche bene consentendo il grande vantaggio di non doversi portare in giro un riferimento al Dispatcher o al SynchronizationContext.

Ecco un breve esempio di come usare AsyncOperationManager; Poniamo di dover scaricare un file dalla rete, facendo uso di HttpWebRequest. L'uso di BeginGetResponse() implica una chiamata asincrona e al rientro per notificare l'interfaccia, ad esempio sollevando un evento, saremmo costretti all'operazione di sincronizzazione:

   1: public class DownloadManager
   2: {
   3:     /// <summary>
   4:     /// Enqueues the download.
   5:     /// </summary>
   6:     /// <param name="uri">The URI.</param>
   7:     public void DownloadFile(Uri uri)
   8:     {
   9:         DownloadState state = new DownloadState
  10:         {
  11:             Operation = AsyncOperationManager.CreateOperation(null),
  12:             Request = (HttpWebRequest)WebRequest.Create(uri)
  13:         };
  14:  
  15:         state.Request.Method = "GET";
  16:         state.Request.BeginGetResponse(new AsyncCallback(Download_Completed), state);
  17:     }
  18:  
  19:     /// <summary>
  20:     /// Download_s the completed.
  21:     /// </summary>
  22:     /// <param name="result">The result.</param>
  23:     private void Download_Completed(IAsyncResult result)
  24:     {
  25:         DownloadState state = result.AsyncState as DownloadState;
  26:  
  27:         if (state != null)
  28:         {
  29:             try
  30:             {
  31:                 HttpWebResponse response = (HttpWebResponse)state.Request.EndGetResponse(result);
  32:  
  33:                 if (response.StatusCode == HttpStatusCode.OK)
  34:                     state.Operation.PostOperationCompleted(
  35:                         new SendOrPostCallback(OnDownloadCompleted), response);
  36:                 else if (response.StatusCode == HttpStatusCode.NotFound)
  37:                     state.Operation.PostOperationCompleted(
  38:                         new SendOrPostCallback(OnDownloadFailed), new InvalidOperationException());
  39:             }
  40:             catch (Exception ex)
  41:             {
  42:                 state.Operation.PostOperationCompleted(
  43:                     new SendOrPostCallback(OnDownloadFailed), ex);
  44:             }
  45:         }
  46:     }
  47:  
  48:     /* ... omissis ... */
  49:  
  50:     private class DownloadState
  51:     {
  52:         /// <summary>
  53:         /// Gets or sets the operation.
  54:         /// </summary>
  55:         /// <value>The operation.</value>
  56:         public AsyncOperation Operation { get; set; }
  57:         /// <summary>
  58:         /// Gets or sets the request.
  59:         /// </summary>
  60:         /// <value>The request.</value>
  61:         public HttpWebRequest Request { get; set; }
  62:     }
  63: }

In buona sostanza un attimo prima di avviare il download chiedo al AsyncOperationManager di fornirmi un AsyncOperation. Quest'ultima viene inserita assieme alla Request in una classe DownloadState e al momento giusto viene recuperata per effettuare la sincronizzazione mediante PostOperationCompleted().

In questo modo il componente sarà facilmente riutilzzabile, senza doversi portare dietro una referenza ad un componente di Interfacce...

Technorati Tag: ,

Voglio ringraziare i partecipanti del Workshop di DotNetWork e con essi anche i membri dello user group che ieri hanno accolto la mia sessione su con una partecipazione davvero esemplare, e con una serie di domande l'una più interessante dell'altra. Spero di essere stato all'altezza della loro sete di sapere...

Grazie di cuore a tutti. E' stata una bellissima esperienza, sia dal punto di vista umano che dal punto di vista "culinario" :)

tags: - categories: News

image_3 Infragistic ha lanciato in queste ore un nuovo sito che consente di cercare la giusta soluzione ai più comuni preoblmi di User Interface.

Il suo nome è Quince ed è anche un buon esempio di cosa si possa fare con Silverlight. La ricerca è semplice e ricca di esempi e sono certo che potrà aiutare molti a districarsi nei nella soluzione dei propri problemi di interattività.

Link: http://quince.infragistics.com/

Technorati Tag: ,,

Spendo due parole per ringraziare le persone che nella serata di Venerdì hanno letteralmente preso di assalto il nostro meeting su Windows Presentation Foundation, costringendoci perfino a richiedere sedie aggiuntive all'hotel per ben due volte. Alla fine abbiamo totalizzato per la seconda volta nella storia del nostro ug una drop negativa (cioè abbiamo avuto più partecipanti che iscritti) fermandoci a 66 presenti.

Certo l'argomento del meeting è tra i più sentiti in questo periodo, però mi piace pensare che le persone abbiano compreso l'importanza degli eventi che presentiamo in termini di occasioni di formazione personale e di incontro e condivisione. Ringrazio perciò tutti, e con particolare simpatia gli eroi che sono partiti da Trieste e da Adria, per raggiungere un meeting a 150 KM di distanza per poi rientrare nella notte.

Un ringraziamento particolare va inoltre a Teorema che ha sponsorizzato l'intero semestre coprendo le spese vive dell'hotel fino a giugno.

La nostra attività continua, spinti come siamo da questi successi e dal continuo incremento di soci che finanziano la nostra attività. Nonostante il periodo numerose persone hanno ritenuto importante sottoscrivere la nostra tessera per il 2009 versando la ragguardevole cifra di 50€ regalando a tutti la possibilità di finanziare 3 o 4 meeting.

Vi aspetto tutti al prossimo appuntamento: http://www.xedotnet.org/meet/silverlightnet.aspx

tags: - categories: News

dddPer che in questi minuti google stia sperimentando seri problemi al suo motore di ricerca. Qualunque ricerca io faccia (ma non è solo un mio problema, anche un collega mi segnala lo stesso comportamento), ottengo il messaggio "Questo sito potrebbe arrecare danni al tuo computer.

Cliccando i link poi si viene dirottati su una minacciosa pagina che informa con maggiore dovizia di particolare ma che sostanzialmente dice la stessa cosa. Evidentemente in Google stanno facendo qualche esperimento...

Technorati Tag: ,

A due mesi dall'evento vi posso annunciare che sono ufficialmente aperte le iscrizioni per il prossimo WebCongress 2.0. Così come è stato per il medesimo evento dello scorso anno saremo ospiti dell'università di Pordenone. L'evento è organizzato a quattro mani tra e e verterà su argomenti prettamente web.

Questi gli argoment del pomeriggio:

  • Davide Vernole - ASP.NET MVC Framework
  • Andrea Boschin - ADO.NET Data Services & Entity Framework
  • Andrea Dottor - ASP.NET Dynamic Data Controls
  • Davide Senatore - Web Application Integration in Enterprise Scenario

    Per maggiori informazioni vi consiglio di rivolgervi al minisito dell'evento che è trovate a questo indirizzo:

    Technorati Tags: ,

  • tags: - categories: News

    Con l'occasione del primo meeting del 2009 che si terrà il Venerdì 30 Gennaio, vorrei proporvi il calendario completo degli appuntamenti di questo primo semestre dell'anno. Come sempre il nostro calendario, proposto e selezionato dai nostri iscritti, vede l'offerta di circa un meeting al mese. Ecco di seguito il calendario:

    Ancora per quest'anno, grazie al nuovo sponsor avremo il privilegio di ospitare i meeting all'interno del Novotel di Mestre Castellana, che garantisce raggiungibilità, comodità e un'atmosfera gradevole. Come consueto i meeting si terranno a partire dalle ore 19:30 (con trenta minuti di margine per l'arrivo dei convenuti). Va segnalato inoltre che avremo ad ogni meeting dei premi offerti da e che alternativamente metteranno in palio licenze e gadgets per i partecipanti.

    tags: - categories: News

    , community italiana della zona toscana organizza un evento di due giorni presso l'Hotel Villa Cappugi di Pistoia. L'agenda dell'evento, della durata di due giorni, spazia sulle problematiche dello sviluppo introducendo via via gli strumenti e l'ambiente del Framework .NET sulla falsariga dello sviluppo di una applicazione.

    Personalmente sarò presente all'evento con una sessione su , che terrò a partire dalle ore 15:00 del 5 febbraio. Si tratterà di una versione riveduta e corretta della sessione che ho tenuto a Mestre lo scorso 12 Dicembre nella quale cercherò di introdurre i concetti di base di un ORM e gli strumenti che Entity Framework mette a disposizione, toccando i vari strati dell'architettura e i pro e contro del loro utilizzo.

    Ci sarebbe da parlare per un'intera giornata e giocoforza dovrò andare veloce su alcuni concetti per restare nei 90 minuti che mi sono riservati (e soprattutto per non tediare il pubblico). Perciò se qualcuno degli iscritti all'evento avesse delle preferenze può indicarmele fin d'ora nei commenti a questo post così cercherò nei limiti del possibile di accontentare tutti orientando opportunamente le scelte.

    So che la sessione è stata molto apprezzata a Dicembre, e quindi spero che possa essere un valido aiuto per chi decide di venire all'evento e intende provare ad abbracciare il mondo degli Object Relational Mappers.

    Vi aspetto numerosi e spero che vi facciate riconoscere anche al di fuori della sessione per intrattenerci un po' di tempo a discutere di tecnologie e quant'altro.

    Technorati Tag: ,
    tags: - categories: News