Visual Basic .Net http://blogs.ugidotnet.org/PietroLibroBlog/category/Visual Basic .Net.aspx Visual Basic .Net it-IT Pietro Libro pietro.libro@libero.it Subtext Version 2.6.0.0 Documentazione EF 7 (Beta 5) http://blogs.ugidotnet.org/PietroLibroBlog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx Documentazione "Work in Progress" della prossima release di Entity Framework : <a href="http://ef.readthedocs.org/en/latest/" target="_blank">http://ef.readthedocs.org/en/latest/</a><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/102030.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx Wed, 22 Jul 2015 09:07:28 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/102030.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/102030.aspx Entity Framework 4 :POCO, Complex Type e Stored Procedure http://blogs.ugidotnet.org/PietroLibroBlog/archive/2011/01/12/entity-framework-4-poco-complex-type-e-stored-procedure.aspx <p>Nuovo articolo della serie pubblicato su <a href="http://www.domusdotnet.org/articoli/entity-framework-40---supporto-poco-e-complex-type.aspx" target="_blank">DomusDotNet</a>, comprensivo di sorgenti in C# e VB.NET. Al solito, critiche e suggerimenti sono sempre ben accetti.</p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99620.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2011/01/12/entity-framework-4-poco-complex-type-e-stored-procedure.aspx Wed, 12 Jan 2011 10:59:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2011/01/12/entity-framework-4-poco-complex-type-e-stored-procedure.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99620.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99620.aspx Tappa Romana del Microsoft Community Tour 2010 http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/11/15/tappa-romana-del-microsoft-community-tour-2010.aspx <p>Qualche foto della tappa Romana del Microsoft Community Tour, <a href="http://www.domusdotnet.org/default.aspx" target="_blank">DomusDotNet</a> e <a href="http://www.visual-basic.it/" target="_blank">Visual Basic Tip &amp; Tricks:</a></p> <p>In ordine da sinistra verso destra:</p> <ol> <li>Foto di gruppo dopo la sessione “Async CTP: async and iterator methods” for VB tenuta da Lucian Wischik (VB Spec Lead - Microsoft Corporation) . Sessione fantastica, ricca di spunti per il futuro, ma non solo. (nella foto Alessandro del Sole, Diego Cattaruzza, Nicolò Carandini e Lucian Wischik )</li> <li>Massimo, Speaker di <a href="http://www.domusdotnet.org" target="_blank">DomusDotNet</a> per la sessione “<em>IE9 &amp; HTML5 for developers” </em></li> <li>Una foto della sessione “<em>IE9 &amp; HTML5 for developers” </em></li> <li>A cena con Lucian :-) </li> <li>Giorgio, Speaker di DomusDotNet per la sessione <em>“ASP.NET MVC e il view engine Razor”</em></li> <li>Polo Windows Phone con il mio nome :-) (Grazie <a href="http://www.geniodelmale.info/" target="_blank">Lorenzo</a>)</li> </ol> <p>  <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000020_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WP_000020" border="0" alt="WP_000020" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000020_thumb.jpg" width="184" height="244" /></a> <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000025%20-%20Copia_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WP_000025 - Copia" border="0" alt="WP_000025 - Copia" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000025%20-%20Copia_thumb.jpg" width="184" height="244" /></a> <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000023_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WP_000023" border="0" alt="WP_000023" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000023_thumb.jpg" width="244" height="184" /></a> <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000028_4.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WP_000028" border="0" alt="WP_000028" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000028_thumb_1.jpg" width="244" height="184" /></a> </p> <p> <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000027_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WP_000027" border="0" alt="WP_000027" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000027_thumb.jpg" width="184" height="244" /></a> <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000029_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WP_000029" border="0" alt="WP_000029" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/TappaRomanadelMicrosoftCommunityTour2010_C71C/WP_000029_thumb.jpg" width="184" height="244" /></a> </p> <p /> <p /> <p /> <p /> <p /> <p /> <p /> <p /> <p>Purtroppo sono arrivato solo nel primo pomeriggio e di conseguenza non ho foto relative alle sessioni del mattino :-(. </p><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99482.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/11/15/tappa-romana-del-microsoft-community-tour-2010.aspx Mon, 15 Nov 2010 15:07:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/11/15/tappa-romana-del-microsoft-community-tour-2010.aspx#feedback 2 http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99482.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99482.aspx Introduzione a WCF 4, Hosting dei servizi http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/11/03/introduzione-a-wcf-4.0-hosting-dei-servizi.aspx Pubblicato sul portale di DomusDotNet l'ultima parte degli articoli introduttiva alla tecnologia WCF 4. L'argomento trattato è l'hosting dei servizi. Articolo e sorgenti (in C# e VB.NET) sono disponibili <a href="http://www.domusdotnet.org/articoli/introduzione-a-wcf-40---hosting-dei-servizi.aspx">qui</a> . Al solito, critiche e suggerimenti sono sempre ben accetti.<img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99429.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/11/03/introduzione-a-wcf-4.0-hosting-dei-servizi.aspx Wed, 03 Nov 2010 08:23:26 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/11/03/introduzione-a-wcf-4.0-hosting-dei-servizi.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99429.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99429.aspx Introduzione a WCF 4, Error Handling http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/27/introduzione-a-wcf-4.0-error-handling.aspx Pubblicato sul portale di DomusDotNet la terza parte della serie introduttiva su WCF 4. L'argomento trattato è la gestione degli errori. Articolo e sorgenti (in C# e VB.NET) sono disponibili <a href="http://www.domusdotnet.org/articoli/introduzione-a-wcf-40---terza-parte.aspx">qui</a> . Critiche e suggerimenti sono sempre ben accetti.<img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99404.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/27/introduzione-a-wcf-4.0-error-handling.aspx Wed, 27 Oct 2010 10:14:37 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/27/introduzione-a-wcf-4.0-error-handling.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99404.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99404.aspx Introduzione a WCF 4, Seconda parte http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/20/introduzione-a-wcf-4-seconda-parte.aspx Pubblicato sul portale di DomusDotNet la seconda parte della mini serie introduttiva su WCF 4. Articolo e sorgenti (in C# e VB.NET) sono disponibili <a href="http://www.domusdotnet.org/articoli/introduzione-a-wcf-40---seconda-parte.aspx">qui</a>. Al solito, critiche e suggerimenti sono sempre ben accetti.<img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99371.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/20/introduzione-a-wcf-4-seconda-parte.aspx Wed, 20 Oct 2010 09:56:27 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/20/introduzione-a-wcf-4-seconda-parte.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99371.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99371.aspx Introduzione a WCF 4 http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/13/introduzione-a-wcf-4.aspx E' uscito il primo di una mini-serie di articoli riguardanti la nuova versione di WCF. Per chi fosse interessato potete trovare l'articolo su DomuDotNet: <span style="text-decoration: underline;"><a href="http://www.domusdotnet.org/articoli/introduzione-a-wcf-40---prima-parte.aspx">Introduzione a WCF 4 .</a></span> Lo scopo della serie è partire dalle basi e affrontare successivamente tematiche più avanzate. Al solito, critiche e suggerimenti sono sempre ben accetti.  La prossima settimana la seconda puntata.<img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/99345.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/13/introduzione-a-wcf-4.aspx Wed, 13 Oct 2010 11:32:29 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2010/10/13/introduzione-a-wcf-4.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/99345.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/99345.aspx RegexStringValidator http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/09/17/94060.aspx <p>Con la versione 2.0 del .Net Framework è stata aggiunta al namespace <em>System.Configuration</em>, la classe <em>RegexStringValidator</em> che permette di eseguire rapidatamente la validazione di stringhe utilizzando espressioni regolari. Supponendo di avere un'espressione del tipo <em>^\d+,\d{2}$</em>, che permette di verificare se una stringa rappresenta un valore numerico con due cifre dopo la virgola, per validare una stringa, possiamo scrivere una funzione molto semplice:</p> <p></p> <div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:4c218f6d-ddec-48e3-953f-e564248760df" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;"> 1</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Private</span><span style="color: #000000;"> </span><span style="color: #0000FF;">Function</span><span style="color: #000000;"> IsValid(</span><span style="color: #0000FF;">ByVal</span><span style="color: #000000;"> value </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> </span><span style="color: #0000FF;">String</span><span style="color: #000000;">) </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> </span><span style="color: #0000FF;">Boolean</span><span style="color: #000000;"> </span><span style="color: #008080;"> 2</span> <span style="color: #000000;"> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Dim</span><span style="color: #000000;"> regexValidator </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> </span><span style="color: #0000FF;">New</span><span style="color: #000000;"> RegexStringValidator(</span><span style="color: #800000;">"</span><span style="color: #800000;">^\d+,\d{2}$</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #008080;"> 4</span> <span style="color: #000000;"> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Try</span><span style="color: #000000;"> </span><span style="color: #008080;"> 6</span> <span style="color: #000000;"> regexValidator.Validate(value) </span><span style="color: #008080;"> 7</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Return</span><span style="color: #000000;"> </span><span style="color: #0000FF;">True</span><span style="color: #000000;"> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Catch</span><span style="color: #000000;"> ex </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> ArgumentException </span><span style="color: #008080;"> 9</span> <span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">E'possibile sfruttuare l'istanza di ArgumentException per </span><span style="color: #008000;"> </span><span style="color: #008080;">10</span> <span style="color: #008000;"></span><span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">ottenere maggiori informazioni sull'eccezione</span><span style="color: #008000;"> </span><span style="color: #008080;">11</span> <span style="color: #008000;"></span><span style="color: #000000;"> </span><span style="color: #0000FF;">Return</span><span style="color: #000000;"> </span><span style="color: #0000FF;">False</span><span style="color: #000000;"> </span><span style="color: #008080;">12</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">End</span><span style="color: #000000;"> </span><span style="color: #0000FF;">Try</span><span style="color: #000000;"> </span><span style="color: #008080;">13</span> <span style="color: #000000;"> </span><span style="color: #008080;">14</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">End Function</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p></p> <p>Utilizzando il metodo <em>classico</em>, avremmo potuto scrivere:</p> <div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ab2ebcbf-4a5c-42f9-8419-467fc03b0340" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;">1</span> <span style="color: #0000FF;">Dim</span><span style="color: #000000;"> regex </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> </span><span style="color: #0000FF;">New</span><span style="color: #000000;"> System.Text.RegularExpressions.Regex(</span><span style="color: #800000;">"</span><span style="color: #800000;">^\d+,\d{2}$</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #008080;">2</span> <span style="color: #000000;"></span><span style="color: #0000FF;">Dim</span><span style="color: #000000;"> match </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> System.Text.RegularExpressions.Match </span><span style="color: #000000;">=</span><span style="color: #000000;"> regex.Match(</span><span style="color: #800000;">""</span><span style="color: #000000;">) </span><span style="color: #008080;">3</span> <span style="color: #000000;">MessageBox.Show(match.Success)</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>Un'osservazione: Per verificare che un oggetto possa essere validato utilizzando <em>RegexStringValidator</em>, è sufficiente utilizzare il metodo d'istanza <em>CanValidate</em> della classe.</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e179058c-e18c-4f0b-9053-505394596bfa" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tag: <a href="http://technorati.com/tags/RegexStringValidator" rel="tag">RegexStringValidator</a></div><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/94060.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/09/17/94060.aspx Wed, 17 Sep 2008 11:00:58 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/09/17/94060.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/94060.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/94060.aspx DataTable.RowChanged e ProgressBar http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/02/13/91175.aspx <p>Se abbiamo bisogno di una soluzione veloce per visualizzare l'avanzamento di un controllo ProgressBar durante il caricamento di un DataTable, possiamo gestire l'evento <em>RowChanded </em>in questo modo:</p> <p> </p><div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9e283011-ed26-4b51-b6bf-77d44ef58e08" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;">1</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Private</span><span style="color: #000000;"> </span><span style="color: #0000FF;">Sub</span><span style="color: #000000;"> CustomRowChanged(</span><span style="color: #0000FF;">ByVal</span><span style="color: #000000;"> sender </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> </span><span style="color: #0000FF;">Object</span><span style="color: #000000;">, </span><span style="color: #0000FF;">ByVal</span><span style="color: #000000;"> e </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> DataRowChangeEventArgs) </span><span style="color: #008080;">2</span> <span style="color: #000000;"> </span><span style="color: #008080;">3</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">If</span><span style="color: #000000;"> (e.Action </span><span style="color: #000000;">=</span><span style="color: #000000;"> DataRowAction.Commit) </span><span style="color: #0000FF;">Then</span><span style="color: #000000;"> </span><span style="color: #008080;">4</span> <span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">Avanziamo il valore della progress bar</span><span style="color: #008000;"> </span><span style="color: #008080;">5</span> <span style="color: #008000;"></span><span style="color: #000000;"> ProgressBar1.Value </span><span style="color: #000000;">+=</span><span style="color: #000000;"> </span><span style="color: #800080;">1</span><span style="color: #000000;"> </span><span style="color: #008080;">6</span> <span style="color: #000000;"> Application.DoEvents() </span><span style="color: #008080;">7</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">End</span><span style="color: #000000;"> </span><span style="color: #0000FF;">If</span><span style="color: #000000;"> </span><span style="color: #008080;">8</span> <span style="color: #000000;"> </span><span style="color: #008080;">9</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">End Sub</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>Il codice per popolare il DataTable con i dati e per registrare il gestore eventi personalizzato può essere del tipo:</p> <p> </p><div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5e7d92c5-8f36-45f4-a4fe-a214e87f0e15" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;"> 1</span> <span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">Imposto la proprietà Maximux del controllo ProgressBar</span><span style="color: #008000;"> </span><span style="color: #008080;"> 2</span> <span style="color: #008000;"></span><span style="color: #000000;"> ProgressBar1.Value </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;"> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;"> ProgressBar1.Maximum </span><span style="color: #000000;">=</span><span style="color: #000000;"> GetNumeroRecords() </span><span style="color: #008080;"> 4</span> <span style="color: #000000;"> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">Registro il gestore eventi personalizzato</span><span style="color: #008000;"> </span><span style="color: #008080;"> 6</span> <span style="color: #008000;"></span><span style="color: #000000;"> </span><span style="color: #0000FF;">AddHandler</span><span style="color: #000000;"> Articoli.ArticoliDataTable.RowChanged, </span><span style="color: #0000FF;">AddressOf</span><span style="color: #000000;"> CustomRowChanged </span><span style="color: #008080;"> 7</span> <span style="color: #000000;"> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Try</span><span style="color: #000000;"> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;"> DataGridView1.SuspendLayout() </span><span style="color: #008080;">10</span> <span style="color: #000000;"> </span><span style="color: #008080;">11</span> <span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">Popolo il DataTable </span><span style="color: #008000;"> </span><span style="color: #008080;">12</span> <span style="color: #008000;"></span><span style="color: #000000;"> ArticoliTableAdapter.Fill(Articoli.ArticoliDataTable) </span><span style="color: #008080;">13</span> <span style="color: #000000;"> </span><span style="color: #008080;">14</span> <span style="color: #000000;"> MessageBox.Show(</span><span style="color: #0000FF;">String</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">"</span><span style="color: #800000;">Caricati {0} records</span><span style="color: #800000;">"</span><span style="color: #000000;">,Articoli.ArticoliDataTable.Rows.Count)) </span><span style="color: #008080;">15</span> <span style="color: #000000;"> </span><span style="color: #008080;">16</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Catch</span><span style="color: #000000;"> ex </span><span style="color: #0000FF;">As</span><span style="color: #000000;"> Exception </span><span style="color: #008080;">17</span> <span style="color: #000000;"> MessageBox.Show(ex.Message) </span><span style="color: #008080;">18</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">Finally</span><span style="color: #000000;"> </span><span style="color: #008080;">19</span> <span style="color: #000000;"> DataGridView1.ResumeLayout() </span><span style="color: #008080;">20</span> <span style="color: #000000;"> </span><span style="color: #008000;">'</span><span style="color: #008000;">Rimuovo l'handler...</span><span style="color: #008000;"> </span><span style="color: #008080;">21</span> <span style="color: #008000;"></span><span style="color: #000000;"> </span><span style="color: #0000FF;">RemoveHandler</span><span style="color: #000000;"> Articoli.ArticoliDataTable.RowChanged, </span><span style="color: #0000FF;">AddressOf</span><span style="color: #000000;"> CustomRowChanged </span><span style="color: #008080;">22</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">End</span><span style="color: #000000;"> </span><span style="color: #0000FF;">Try</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>Ovviamente si potrebbero usare modelli di programmazione asincrona o popolare dati mediante un thread diverso da quello principale.</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e48dcc0f-320d-4a32-b7b4-7c230f0136da" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tag: <a href="http://technorati.com/tags/DataTable.RowChanged%20Event" rel="tag">DataTable.RowChanged Event</a></div><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/91175.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/02/13/91175.aspx Wed, 13 Feb 2008 18:00:29 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/02/13/91175.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/91175.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/91175.aspx Windows Form, thread ed eccezioni http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/02/03/90987.aspx <p>Supponiamo di avere una semplice applicazione Windows Form il cui unico (e stupido) compito è quello di eseguire una divisione, qualcosa  del tipo</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/WindowsFormthreadedeccezioni_A6FC/Img_1.jpg"><img width="151" height="134" border="0" style="border-width: 0px;" alt="Img_1" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/WindowsFormthreadedeccezioni_A6FC/Img_1_thumb.jpg" /></a></p> <p align="justify">Se non eseguiamo nessuna validazione sui campi, potrebbe accadere che vengano eseguiti calcoli sbagliati (ad esempio una divisione per zero)  e di conseguenza che vengano sollevate le corrispondenti eccezioni. Per catturarle, possiamo utilizzare dei blocchi<em> Try...Catch...Finally</em> oppure  gestire l'evento <em>Application.ThreadException</em>. Così facendo, oltre alla possibilità di memorizzare un log delle eccezioni a livello di applicazione o eseguire del codice di pulizia, possiamo visualizzare una Windows Form <em>User-Friendly</em>, senza interrompere bruscamente l'applicazione. Per registrare il gestore  dell'evento <em>ThreadException</em>, possiamo aggiungere un modulo al nostro progetto e scrivere il seguente codice:</p> <div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e1f4ff5a-a087-4220-8d31-98407612362d" style="margin: 0px; padding: 0px; display: inline; float: none;"> <pre style="overflow: auto; background-color: White; white-space: -moz-pre-wrap;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">STAThread()</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> _<br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Sub</span><span style="color: rgb(0, 0, 0);"> Main()<br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);">'</span><span style="color: rgb(0, 128, 0);">Imposta il gestore evento Application.ThreadExeception personalizzato</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">AddHandler</span><span style="color: rgb(0, 0, 0);"> Application.ThreadException, </span><span style="color: rgb(0, 0, 255);">AddressOf</span><span style="color: rgb(0, 0, 0);"> CustomErrorHandler<br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">AddHandler</span><span style="color: rgb(0, 0, 0);"> AppDomain.CurrentDomain.UnhandledException, </span><span style="color: rgb(0, 0, 255);">AddressOf</span><span style="color: rgb(0, 0, 0);"> AppDomainCustomErrorHandler<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);">'</span><span style="color: rgb(0, 128, 0);">Imposta il gestore evento Application.ApplicationExit personalizzato</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">AddHandler</span><span style="color: rgb(0, 0, 0);"> Application.ApplicationExit, </span><span style="color: rgb(0, 0, 255);">AddressOf</span><span style="color: rgb(0, 0, 0);"> CustomApplicationExit<br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);"> Application.Run(</span><span style="color: rgb(0, 0, 255);">New</span><span style="color: rgb(0, 0, 0);"> Form1())<br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">End Sub</span></div></pre> <!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>Dove il gestore <em>CustomErrorHandler</em> è del tipo:</p> <p> </p> <div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:12c908bb-edbd-4359-b302-fdcae477c2b8" style="margin: 0px; padding: 0px; display: inline; float: none;"> <pre style="overflow: auto; background-color: White; white-space: -moz-pre-wrap;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Sub</span><span style="color: rgb(0, 0, 0);"> CustomErrorHandler(</span><span style="color: rgb(0, 0, 255);">ByVal</span><span style="color: rgb(0, 0, 0);"> sender </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Object</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">ByVal</span><span style="color: rgb(0, 0, 0);"> e </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> System.Threading.ThreadExceptionEventArgs)<br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Try</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);">'</span><span style="color: rgb(0, 128, 0);">Gestisce l'eccezione visualizzando una finestra di dialogo comune per l'eventuali eccezioni</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"> My.Forms.frmExeception.DescrizioneEccezione </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> e.Exception.Message<br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);"> My.Forms.frmExeception.ShowDialog()<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Catch</span><span style="color: rgb(0, 0, 0);"> ex </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> Exception<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">End</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Try</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">End Sub</span></div></pre> <!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p> </p> <p>Il quale, in caso di eccezione, visualizza la seguente finestra di dialogo:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/WindowsFormthreadedeccezioni_A6FC/Img_2.jpg"><img width="244" height="126" border="0" style="border-width: 0px;" alt="Img_2" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/PietroLibroBlog/WindowsLiveWriter/WindowsFormthreadedeccezioni_A6FC/Img_2_thumb.jpg" /></a> </p> <p align="justify">Nel <em>Sub Main</em>, oltre a registrare l'evento <em>Application.ThreadException</em>, viene registrato anche il gestore per l'evento <em>AppDomain.CurrentDomain.UnhandledExecption</em>, perchè nel in cui caso la nostra applicazione sfrutti il multithreading, l'eventuali eccezioni dovute ai thread secondari non sarebbero catturate da <em>CustomErrorHandler</em>. Il codice del gestore per l'evento <em>AppDomain.CurrrentDomain.UnhandledException</em> è il seguente:</p> <div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3ece1029-72c0-4862-b3be-676dd3892d85" style="margin: 0px; padding: 0px; display: inline; float: none;"> <pre style="overflow: auto; background-color: White; white-space: -moz-pre-wrap;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);">Public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Sub</span><span style="color: rgb(0, 0, 0);"> AppDomainCustomErrorHandler(</span><span style="color: rgb(0, 0, 255);">ByVal</span><span style="color: rgb(0, 0, 0);"> sender </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Object</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">ByVal</span><span style="color: rgb(0, 0, 0);"> e </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> UnhandledExceptionEventArgs)<br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Try</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);">'</span><span style="color: rgb(0, 128, 0);">Gestisce l'eccezione visualizzando una finestra di dialogo comune per l'eventuali eccezioni</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);">'</span><span style="color: rgb(0, 128, 0);">Ottiene l'oggetto Exception</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Dim</span><span style="color: rgb(0, 0, 0);"> appDomainException </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> Exception </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">DirectCast</span><span style="color: rgb(0, 0, 0);">(e.ExceptionObject, System.Exception) <br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);"> My.Forms.frmExeception.DescrizioneEccezione </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> appDomainException.Message<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);"> My.Forms.frmExeception.ShowDialog()<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">If</span><span style="color: rgb(0, 0, 0);"> (e.IsTerminating) </span><span style="color: rgb(0, 0, 255);">Then</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);">'</span><span style="color: rgb(0, 128, 0);">Operazioni di pulizia...</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">End</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">If</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Catch</span><span style="color: rgb(0, 0, 0);"> ex </span><span style="color: rgb(0, 0, 255);">As</span><span style="color: rgb(0, 0, 0);"> Exception<br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">14</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">End</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">Try</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">15</span> <span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">End Sub</span></div></pre> <!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p align="justify">Il quale esegue una cast dell'oggetto<em> e.ExceptionObject</em> in <em>System.Exception</em> e visualizza la finestra di dialogo su mostrata. L'istanza di oggetto <em>UnhandledExecptionEventArgs</em> espone la proprietà <em>IsTerminating</em> che indica se il common language runtime stà terminando o meno. Nel caso di <em>UnhandledExecption</em>, il .Net Framework , con o senza gestione del relativo evento, visualizza la classica finestra di dialogo per l'esecuzione del debug  dell'applicazione. Per testare il codice ed il relativo comportamento dell'applicazione, da Visual Studio è necessario lanciare l'applicazione  senza Debug.</p> <a title="Codice Sorgente Esempio" target="_blank" href="http://www.pietrolibro.name/sources/Thread Exception.zip">Thread Exception.zip</a><br /> <br /> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8edd1700-5b3f-4701-99dd-4216c586dd78" style="margin: 0px; padding: 0px; display: inline; float: none;">Technorati Tag: <a href="http://technorati.com/tags/Application.ThreadException" rel="tag">Application.ThreadException</a>,<a href="http://technorati.com/tags/UnhandledException" rel="tag">UnhandledException</a></div><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/90987.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/02/03/90987.aspx Sun, 03 Feb 2008 13:26:00 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/02/03/90987.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/90987.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/90987.aspx