<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://buildbrasil.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Microsoft Visual C#</title><link>http://buildbrasil.org/blogs/csharp/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Pegar o nome do mês</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/13/pegar-o-nome-do-m-234-s.aspx</link><pubDate>Sat, 13 Jun 2009 17:39:18 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:62</guid><dc:creator>Abdul Hade</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=62</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/13/pegar-o-nome-do-m-234-s.aspx#comments</comments><description>&lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;Vou ser rápido nessa, então vamos lá. Quando queremos saber o nome do mês basta usar a seguinte função:&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;Usamos a NameSpace:&lt;/div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;/pre&gt;


&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Comando:&lt;/div&gt;&lt;pre class="csharpcode"&gt;DateTimeFormatInfo.CurrentInfo.GetMonthName(numero do mês); &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Rápido não?! Nessa classe CurrentInfo podemos também trazer outras informações como, por exemplo, &lt;/pre&gt;&lt;pre class="csharpcode"&gt;abreviatura de mês, calendários, dias da semana, obter formatos e muitas outras coisas.&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=62" width="1" height="1"&gt;</description></item><item><title>Pegar o MacAddress</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/13/pegar-o-macaddress.aspx</link><pubDate>Sat, 13 Jun 2009 17:16:44 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:58</guid><dc:creator>Abdul Hade</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=58</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/13/pegar-o-macaddress.aspx#comments</comments><description>&lt;div&gt;Estou tentando fazer isso desde que eu comecei a programar, e agora de tanto pesquisar sobre o assunto, consegui material suficiente para o artigo!&lt;/div&gt;  &lt;div&gt;Primeiro adicione a namespace System.Management, pelo seguinte modo: Project/Add Reference. Abaixo o código para pegar o endereço físico da sua máquina:&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt; &lt;font size="2"&gt;   &lt;p&gt;&lt;/p&gt;   &lt;font color="#008000" size="2"&gt;// Através deles podemos consultar informações sobre aplicações , serviços e dispositivos do sistema.&lt;/font&gt;&lt;font size="2"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;// A classe ManagementClass serve para consultar as informações sobre aplicações, serviços e      &lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;// dispositivos do sistema relacionados ao WMI, nesse caso eu estou usando para&lt;/font&gt;&lt;font size="2"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;// consultar a classe &amp;quot;Win32_NetworkAdapterConfiguration&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;ManagementClass&lt;/font&gt;&lt;font size="2"&gt; MgnClss = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;ManagementClass&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Win32_NetworkAdapterConfiguration&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;); &lt;/font&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;&lt;/div&gt;   &lt;font color="#008000" size="2"&gt;// A Classe ManagementObjectCollection serve para o obter a coleção de instancias do objeto acima&lt;/font&gt;&lt;font size="2"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;ManagementObjectCollection&lt;/font&gt;&lt;font size="2"&gt; MgnObjtColtn = MgnClss.GetInstances(); &lt;/font&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;&lt;/div&gt;   &lt;font color="#008000" size="2"&gt;//&lt;font color="#008000" size="2"&gt;Ele percorre a coleção de objetos e mostra o MAC ADDRESS do primeiro adaptador de rede encontrado.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  &lt;div&gt;&lt;font size="2"&gt;&lt;font color="#008000"&gt;//Você pode achar muitas outras informações: &lt;a href="http://msdn.microsoft.com/en-us/library/aa394217(VS.85).aspx" target="_blank"&gt;saiba mais&lt;/a&gt;!&lt;/font&gt;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt; (&lt;font color="#2b91af"&gt;ManagementObject&lt;/font&gt; MgnObjt &lt;font color="#0000ff"&gt;in&lt;/font&gt; MgnObjtColtn) { &lt;/font&gt;&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;&lt;font color="#008000" size="2"&gt;//Mostra a mensagem com o MAC ADRESS&lt;/font&gt;&lt;font size="2"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;MessageBox&lt;/font&gt;&lt;font size="2"&gt;.Show(MgnObjt[&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;MacAddress&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;].ToString());      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;break&lt;/font&gt;&lt;font size="2"&gt;; }&lt;/font&gt;&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;Eu aconselho, se tiver dúvidas, por que também tive, testar se é mesmo o seu &lt;strong&gt;MAC ADRESS&lt;/strong&gt;, abrindo o &lt;strong&gt;DOS&lt;/strong&gt; e digitando &lt;strong&gt;ipconfig /all. &lt;/strong&gt;Nunca se sabe né...rsrs...até próxima!.&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=58" width="1" height="1"&gt;</description></item><item><title>Validando Arquivos</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/13/validando-um-arquivos.aspx</link><pubDate>Sat, 13 Jun 2009 17:01:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:57</guid><dc:creator>Abdul Hade</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=57</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/13/validando-um-arquivos.aspx#comments</comments><description>&lt;p&gt;&amp;lsquo;Hoje, gra&amp;ccedil;as ao avan&amp;ccedil;o da tecnologia, temos muitas facilidades para guardar nossos arquivos na Internet, como por exemplo, SkyDrive da Microsoft, que &amp;eacute; um HD virtual de 25 Gigabytes , voc&amp;ecirc; pode guardar seus arquivos. &lt;/p&gt;
&lt;p&gt;A &amp;uacute;nica dificuldade disso tudo &amp;eacute; voc&amp;ecirc; ter que validar isso, os controles do Visual Studio 2005 e 2008, n&amp;atilde;o cont&amp;eacute;m par&amp;acirc;metros para voc&amp;ecirc; poder configurar limite de tamanho, tipos de arquivos e outras coisas que voc&amp;ecirc; tem fazer no c&amp;oacute;digo. &lt;/p&gt;
&lt;p&gt;E para ajudar voc&amp;ecirc;s nisso, eu irei colocar alguns m&amp;eacute;todos que fazem v&amp;aacute;rias valida&amp;ccedil;&amp;otilde;es. &lt;/p&gt;
&lt;p&gt;Irei come&amp;ccedil;ar falando sobre MimeType do arquivo, ou seja, o tipo dele. &lt;/p&gt;
&lt;p&gt;Primeiro, irei criar par&amp;acirc;metros que me ajudaram a validar isso. Criarei eles no Web.Config, na parte de AppSettings, por que l&amp;aacute; conseguimos alterar seu valor, mesmo quando a aplica&amp;ccedil;&amp;atilde;o j&amp;aacute; esta em produ&amp;ccedil;&amp;atilde;o, ou seja, caso queira mudar alguma especifica&amp;ccedil;&amp;atilde;o do arquivo, basta mudar. &lt;/p&gt;
&lt;p&gt;Segue os par&amp;acirc;metros: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;colecaoMimeType -&lt;/strong&gt; Colocaremos os tipos de arquivos separando por (;). &lt;strong&gt;&amp;nbsp;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value - &lt;/strong&gt;Application/exe &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sizeFile -&lt;/strong&gt; Aqui ser&amp;aacute; o valor do tamanho m&amp;aacute;ximo permitido do arquivo. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value&lt;/strong&gt;- 1048576 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NoChars -&lt;/strong&gt; Caracteres n&amp;atilde;o permitidos nas imagens. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value &lt;/strong&gt;- &lt;strong&gt;&amp;quot;&lt;/strong&gt;+=&amp;acute;`~^&amp;ordm;&amp;deg;;:,!@#$%&amp;uml;*()-?:{}][&amp;Auml;&amp;Aring;&amp;Aacute;&amp;Acirc;&amp;Agrave;&amp;Atilde;&amp;auml;&amp;aacute;&amp;acirc;&amp;agrave;&amp;atilde;&amp;Eacute;&amp;Ecirc;&amp;Euml;&amp;Egrave;&amp;eacute;&amp;ecirc;&amp;euml;&amp;egrave;&amp;Iacute;&amp;Icirc;&amp;Iuml;&amp;Igrave;&amp;iacute;&amp;icirc;&amp;iuml;&amp;igrave;&amp;Ouml;&amp;Oacute;&amp;Ocirc;&amp;Ograve;&amp;Otilde;&amp;ouml;&amp;oacute;&amp;ocirc;&amp;ograve;&amp;otilde;&amp;Uuml;&amp;Uacute;&amp;Ucirc;&amp;uuml;&amp;uacute;&amp;ucirc;&amp;ugrave;&amp;Ccedil;&amp;ccedil;&amp;ntilde;&amp;Ntilde;&amp;quot; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YesChars&amp;nbsp; -&lt;/strong&gt;Caracteres que ser&amp;atilde;o usa do para substituir os de cima. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value &lt;/strong&gt;= &lt;strong&gt;&amp;quot;&lt;/strong&gt;___________________________AAAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUuuuuCcnN_&amp;quot; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Depois iremos criar os seguintes m&amp;eacute;todos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Valida o tipo do arquivo&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;tipoM&amp;quot;&amp;gt;recebe o tipo de arquivo&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;retorna se o tipo &amp;eacute; valido de acordo a appSettings no web.config&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; validaTipoArquivo(&lt;span class="kwrd"&gt;string&lt;/span&gt; tipo)
        {

            &lt;span class="kwrd"&gt;bool&lt;/span&gt; eValido = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

            &lt;span class="kwrd"&gt;string&lt;/span&gt;[] arrayMimeType = ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;colecaoMimeType&amp;quot;&lt;/span&gt;].Split(&lt;span class="str"&gt;&amp;#39;;&amp;#39;&lt;/span&gt;);

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; mimeType &lt;span class="kwrd"&gt;in&lt;/span&gt; arrayMimeType)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (tipoMime == mimeType)
                {
                    eValido = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; eValido;

        }
        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Valida o tamanho da imagem&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;tamanhoArquivo&amp;quot;&amp;gt;recebe o tamanho da imagem&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;retorna se o tamanho &amp;eacute; valido de acordo a appSettings no web.config&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; validaTamanhoArquivo(&lt;span class="kwrd"&gt;int&lt;/span&gt; tamanhoArquivo)
        {

            &lt;span class="kwrd"&gt;bool&lt;/span&gt; eValido = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            &lt;span class="kwrd"&gt;int&lt;/span&gt; sizeLimit = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;sizeFile&amp;quot;&lt;/span&gt;]);

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (fileSize &amp;lt; sizeLimit)
                eValido = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

            &lt;span class="kwrd"&gt;return&lt;/span&gt; eValido;

        }


        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Substitui o caracteres especiais, por caracteres normais ou v&amp;aacute;lidos.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;word&amp;quot;&amp;gt;recebe o nome da imagem&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;retorna a imagem com os caracteres especiais substituidos&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; validaNomeArquivo(&lt;span class="kwrd"&gt;string&lt;/span&gt; nomeArquivo)
        {

            &lt;span class="kwrd"&gt;string&lt;/span&gt; forbidden = ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;NoChars&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;string&lt;/span&gt; allowed = ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;YesChars&amp;quot;&lt;/span&gt;];
    &lt;span class="rem"&gt;//Substitui caracteres inv&amp;aacute;lidos pelos v&amp;aacute;lidos.&lt;/span&gt;
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; forbidden.Length; i++)
            {
                word = word.Replace(forbidden&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;.ToString(), allowed&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;.ToString()).Trim();
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; word;

        }&lt;/pre&gt;
&lt;p&gt;

&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=57" width="1" height="1"&gt;</description></item><item><title>Serializando Arquivos Xml com Namespace</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/08/serializando-arquivos-xml-com-namespace.aspx</link><pubDate>Mon, 08 Jun 2009 20:53:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:50</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=50</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/08/serializando-arquivos-xml-com-namespace.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal,&lt;/p&gt;
&lt;p&gt;Semana passada recebi um desafio muito interessante, e que gostaria de compartilhar com todos. O desafio foi que n&amp;atilde;o est&amp;aacute;vamos conseguindo serializar objetos com Namespaces. Uma defini&amp;ccedil;&amp;atilde;o para Namespace em arquivos Xml segundo o &lt;a target="_blank" href="http://www.w3schools.com/XML/xml_namespaces.asp"&gt;w3schools&lt;/a&gt; &amp;eacute; que eles servem para eliminar a duplicidade dos elementos.&lt;/p&gt;
&lt;p&gt;Para quem n&amp;atilde;o sabe o que &amp;eacute; o namespace em um arquivo xml, aqui vai um exemplo (destacado pelo quadrado vermelho):&lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mhzQZsIKDV17Csaw3IbWhu3TBo_j9qNxQ7xVOq8XUyCHh73vKWZOXHLdJQQzds73LOdP3FcuBY-YSWkua60TBNAGh0yCZkQwGjS5bCr5YcOb5fupm458smcaoAhZSuVQF9_yWtixwJsQP5wYvVN0-6Q/01[11]%203E1A1E76.gif"&gt;&lt;img border="0" width="598" src="https://oggura.bay.livefilestore.com/y1mMW29ftEI-5HDTFL6DsjFoUHNYGkFfu1RnESgFloeQmiJWwP9CFewyTJjAeaUq5w6HyuLYiC6MaMBIUbrRRwTfXorjk06Majp6PscrnpNB11IxyEViwU8cEn_ZsVyMG4qbQkmvNjJbj-d_W3FIFs7lQ/01_thumb[5]%200DD518CA.gif" alt="01" height="217" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" title="01" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Agora que j&amp;aacute; sabemos o que &amp;eacute; e para que serve, vamos criar um modelo do documento acima.&lt;br /&gt;Para isso precisamos seguir alguns passos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Criar um projeto do tipo Console Application&lt;/li&gt;
&lt;li&gt;Adicionar &amp;agrave; solution um projeto do tipo Class Library.&lt;ol&gt;
&lt;li&gt;Adicionar a classe Perguntas&lt;/li&gt;
&lt;li&gt;Adicionar a classe Pergunta&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mxSRKCW9b4T9zSSpD3wl_bMqAlNZpduwiY6qBVle2vjStHds96FtW5U9FX8v57TFzG7dp4fa9aZyl6mfd_g_HILGTJVV4HuddUTDSVkPyoxzP_hPM7IMBLjc-YJO4F3finJ0T6_DHRX1KzJEBHyCw8g/02[3]%200B0EA230.gif"&gt;&lt;img border="0" width="302" src="https://oggura.bay.livefilestore.com/y1mY7P0d8YYIVSb27ZCO5MxezmKmBQnlkvDask7XrBtCjIzADkiEUlzFEK9d3QmPUZPism6YUcrczNa6I5LXeKk-pip_RbISSbZJ7ShdGWq0RhdeJrsmVjJ6Jx8uIdxq8cUg04sH6YZCcY0BJSrgHa8ug/02_thumb[1]%2051DA0A44.gif" alt="02" height="199" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:block;FLOAT:none;MARGIN-LEFT:auto;BORDER-LEFT:0px;MARGIN-RIGHT:auto;BORDER-BOTTOM:0px;" title="02" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A codifica&amp;ccedil;&amp;atilde;o para o arquivo Perguntas.cs dever&amp;aacute; ser a seguinte:&lt;/p&gt;
&lt;pre&gt;[&lt;span style="COLOR:#2b91af;"&gt;Serializable&lt;/span&gt;]
[&lt;span style="COLOR:#2b91af;"&gt;XmlRoot&lt;/span&gt;(ElementName = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Perguntas&amp;quot;&lt;/span&gt;)]
&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Perguntas &lt;/span&gt;{

    &lt;span style="COLOR:blue;"&gt;private int &lt;/span&gt;_id;
    &lt;span style="COLOR:blue;"&gt;private &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Pergunta&lt;/span&gt;&amp;gt; _pergunta;

    &lt;span style="COLOR:blue;"&gt;public &lt;/span&gt;Perguntas() {
        _pergunta = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Pergunta&lt;/span&gt;&amp;gt;();
    }

    [&lt;span style="COLOR:#2b91af;"&gt;XmlAttribute&lt;/span&gt;(AttributeName = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;)]
    &lt;span style="COLOR:blue;"&gt;public int &lt;/span&gt;ID {
        &lt;span style="COLOR:blue;"&gt;get &lt;/span&gt;{ &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;_id; }
        &lt;span style="COLOR:blue;"&gt;set &lt;/span&gt;{ _id = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }
    }

    [&lt;span style="COLOR:#2b91af;"&gt;XmlElement&lt;/span&gt;(ElementName = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Pergunta&amp;quot;&lt;/span&gt;)]
    &lt;span style="COLOR:blue;"&gt;public &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Pergunta&lt;/span&gt;&amp;gt; Pergunta {
        &lt;span style="COLOR:blue;"&gt;get &lt;/span&gt;{ &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;_pergunta; }
        &lt;span style="COLOR:blue;"&gt;set &lt;/span&gt;{ _pergunta = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }
    }

}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A codifica&amp;ccedil;&amp;atilde;o para o arquivo Pergunta.cs dever&amp;aacute; ser a seguinte:&lt;/p&gt;
&lt;pre&gt;[&lt;span style="COLOR:#2b91af;"&gt;Serializable&lt;/span&gt;]
[&lt;span style="COLOR:#2b91af;"&gt;XmlRoot&lt;/span&gt;(ElementName = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Pergunta&amp;quot;&lt;/span&gt;)]
&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Pergunta &lt;/span&gt;{

    &lt;span style="COLOR:blue;"&gt;private string &lt;/span&gt;_TextoPergunta;
    &lt;span style="COLOR:blue;"&gt;private string &lt;/span&gt;_resposta;

    &lt;span style="COLOR:blue;"&gt;public &lt;/span&gt;Pergunta() {
        &lt;span style="COLOR:green;"&gt;// EMPTY CONSTRUCTOR
    &lt;/span&gt;}

    &lt;span style="COLOR:blue;"&gt;public &lt;/span&gt;Pergunta(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;pergunta, &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;resposta) {
        _TextoPergunta = pergunta;
        _resposta = resposta;
    }

    [&lt;span style="COLOR:#2b91af;"&gt;XmlElement&lt;/span&gt;(ElementName = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;TextoPergunta&amp;quot;&lt;/span&gt;)]
    &lt;span style="COLOR:blue;"&gt;public string &lt;/span&gt;TextoPergunta {
        &lt;span style="COLOR:blue;"&gt;get &lt;/span&gt;{ &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;_TextoPergunta; }
        &lt;span style="COLOR:blue;"&gt;set &lt;/span&gt;{ _TextoPergunta = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }
    }

    [&lt;span style="COLOR:#2b91af;"&gt;XmlElement&lt;/span&gt;(ElementName = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Resposta&amp;quot;&lt;/span&gt;)]
    &lt;span style="COLOR:blue;"&gt;public string &lt;/span&gt;Resposta {
        &lt;span style="COLOR:blue;"&gt;get &lt;/span&gt;{ &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;_resposta; }
        &lt;span style="COLOR:blue;"&gt;set &lt;/span&gt;{ _resposta = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }
    }

}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Depois de deixar a estrutura pronta. Vamos at&amp;eacute; o arquivo Program.cs do projeto Console Application.&lt;br /&gt;Com a classe aberta vamos codificar o seguinte:&lt;/p&gt;
&lt;pre&gt;&lt;span style="COLOR:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;[] args) {

    &lt;span style="COLOR:#2b91af;"&gt;Perguntas &lt;/span&gt;perguntas = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Perguntas&lt;/span&gt;();
    perguntas.Pergunta.Add(&lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Pergunta&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;1- Como devo fazer isso?&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Voc&amp;ecirc; n&amp;atilde;o pode fazer isso.&amp;quot;&lt;/span&gt;));
    perguntas.Pergunta.Add(&lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Pergunta&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;2- E se eu n&amp;atilde;o conseguir?&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Tente de outra forma.&amp;quot;&lt;/span&gt;));

    &lt;span style="COLOR:#2b91af;"&gt;XmlDocument &lt;/span&gt;documento = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;XmlDocument&lt;/span&gt;();

    &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;respostaXml = Serializar(perguntas);

    documento.LoadXml(respostaXml);

    documento.Save(&lt;span style="COLOR:#a31515;"&gt;@&amp;quot;c:\temp\xmlNameSpace.xml&amp;quot;&lt;/span&gt;);
}

&lt;span style="COLOR:gray;"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="COLOR:green;"&gt;CLASSE RESPONS&amp;Aacute;VEL PARA SERIALIZAR OS OBJETOS
&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&amp;quot;objeto&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Uma vari&amp;aacute;vel do tipo Refer&amp;ecirc;ncia&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Retorna uma string contendo o objeto serializado. (formato XML)&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public static string &lt;/span&gt;Serializar(&lt;span style="COLOR:blue;"&gt;object &lt;/span&gt;objeto) {
    &lt;span style="COLOR:#2b91af;"&gt;StringWriter &lt;/span&gt;result = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;StringWriter&lt;/span&gt;();
    &lt;span style="COLOR:#2b91af;"&gt;XmlSerializer &lt;/span&gt;xmlTrace = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;XmlSerializer&lt;/span&gt;(objeto.GetType());

    &lt;span style="COLOR:blue;"&gt;try &lt;/span&gt;{
        xmlTrace.Serialize(result, objeto);
    } &lt;span style="COLOR:blue;"&gt;catch &lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;Exception &lt;/span&gt;ex) {
        xmlTrace.Serialize(result, ex);
    } &lt;span style="COLOR:blue;"&gt;finally &lt;/span&gt;{
        result.Close();
    }

    &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;result.ToString();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Com tudo codificado, vamos agora executar a aplica&amp;ccedil;&amp;atilde;o. E se o processo ocorreu sem problemas, vamos at&amp;eacute; a pasta &amp;ldquo;c:\temp&amp;rdquo; e abrir o arquivo xmlNameSpace.xml. Ele dever&amp;aacute; estar exatamente igual a primeira imagem deste artigo.&lt;/p&gt;
&lt;p&gt;At&amp;eacute; agora fizemos o simples. Como podemos deixar o arquivo com prefixos igual &amp;agrave; imagem abaixo?&lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mOIL3j63rrFCJsFKW69RPjpStrUWMNiacdektu5W1ry5DSfxAkuaHzGiOShLV-iQ2UZximibxyIR3i2VvCyY4k6rGXWZQplWipHbXPbT60BKZhgnTU-DzruXN06sw8UD1SN4spodIjTe3hS21ouCOkg/03[3]%2051501C66.gif"&gt;&lt;img border="0" width="594" src="https://oggura.bay.livefilestore.com/y1mjtEtD7QBsQ9FGKbFRd91qBMv0qcDlgNGaJvWchhtOfbnqf7g1oJnoGJ8WBF_oHLJo2m5JneA3IC8ac9jvuZ40xTwM0PNhVHcRBIa4xq0VSgmCCO4ZbRkKS30M01BnnXd7Q_z9hJHWf930_GqcL2a3A/03_thumb[1]%2009DD0B8B.gif" alt="03" height="241" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" title="03" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para isso, devemos adicionar dois namespace. O namespace &amp;eacute; composto principalmente de duas coisas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A url de defini&amp;ccedil;&amp;atilde;o e&lt;/li&gt;
&lt;li&gt;Um Prefixo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O primeiro passo &amp;eacute; avisar para a fun&amp;ccedil;&amp;atilde;o de serializa&amp;ccedil;&amp;atilde;o que ser&amp;atilde;o adicionados dois namespaces ao processo. Para isso devemos ir na fun&amp;ccedil;&amp;atilde;o serializar e deix&amp;aacute;-la da seguinte forma:&lt;/p&gt;
&lt;pre&gt;&lt;span style="COLOR:blue;"&gt;public static string &lt;/span&gt;Serializar(&lt;span style="COLOR:blue;"&gt;object &lt;/span&gt;objeto) {
    &lt;span style="COLOR:#2b91af;"&gt;StringWriter &lt;/span&gt;result = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;StringWriter&lt;/span&gt;();
    &lt;span style="COLOR:#2b91af;"&gt;XmlSerializer &lt;/span&gt;xmlTrace = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;XmlSerializer&lt;/span&gt;(objeto.GetType());

    &lt;span style="COLOR:green;"&gt;/*
     * NAMESPACES DE VALIDA&amp;Ccedil;&amp;Atilde;O
     */
    &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;XmlSerializerNamespaces &lt;/span&gt;ser = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;XmlSerializerNamespaces&lt;/span&gt;();
    ser.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;marcos&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://www.marcossabino.com&amp;quot;&lt;/span&gt;);
    ser.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;sabino&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://marcossabinofilho.spaces.live.com&amp;quot;&lt;/span&gt;);
    &lt;span style="COLOR:green;"&gt;/*
     * ADICIONANDO O &amp;quot;&amp;quot; NO NAMESPACES, &amp;Eacute; ELIMINADO O LIXO DO PROCESSO
     */
    &lt;/span&gt;ser.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;); 

    &lt;span style="COLOR:blue;"&gt;try &lt;/span&gt;{
        xmlTrace.Serialize(result, objeto, ser);
    } &lt;span style="COLOR:blue;"&gt;catch &lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;Exception &lt;/span&gt;ex) {
        xmlTrace.Serialize(result, ex);
    } &lt;span style="COLOR:blue;"&gt;finally &lt;/span&gt;{
        result.Close();
    }

    &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;result.ToString();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O pr&amp;oacute;ximo passo &amp;eacute; ir na classe Pergunta e adicionar o seguinte par&amp;acirc;metro nas propriedades:&lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mTH-_n8omXyUcC6_AW7WvkGvYXkFu-R1dE6FnbsWE_SgplBkfKVvd25JX2hYviYd8pelTbqoxcC9liis3AvvBLEPdctFMV-BTYULfjPvSx6ylaWMWYTWK_v0CpI3E32Al2W94CDWTlnt7GhR49T1_cg/04[3]%20474F3F1C.gif"&gt;&lt;img border="0" width="594" src="https://oggura.bay.livefilestore.com/y1mTDRxC9BNmNgkH3KnyYxOq7q1LzBcmvRFFcqhKwuXhAJazADJ7Z4a9AWOSOi5R9fP3zU2H_atjM9WcyL8fUwdcdSEDz3VcYxwoDGBJGe-cZvGD0kpzhcLJnfElm058pzA4mPwMU9wR_Uo-PU4iC5MJQ/04_thumb[1]%204D0EB87D.gif" alt="04" height="412" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" title="04" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Agora &amp;eacute; s&amp;oacute; rodar e ver o resultado:&lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mlhzbvtkAp7-feg9r0_WrClfqNmBkvNXzQQVbcxp9mfc6qfEw5DyMlCWaex3niN9RhzUtG6vdPCdaDUQAi8nNZbYyE8ZH7hZsyVGfsS1A3wPeK9ImvIlp3fk8vsybsFWGYIqn2FKK75IRPWh8cc1XvA/05[3]%202C69BDE2.gif"&gt;&lt;img border="0" width="594" src="https://oggura.bay.livefilestore.com/y1mR4LKxIYdsgKIP0yJYuRlPvSkY70rwuJuAvHiShsfUD5p-vU8VAgmnSAXVXMwBeBZ9Wpo6ooZfFJLTpnOynv1qvd6fzuPSb8oNWLPmkZb8yOs4mtPIsEzQyQS0qm84Ax0jHdfTImdWQfGuPH2l4kbCg/05_thumb[1]%20749948C8.gif" alt="05" height="221" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" title="05" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Essa t&amp;eacute;cnica de usar os namespace, pode ser usado direto com os elementos, tanto para os atributos do Node.&lt;/p&gt;
&lt;p&gt;Agora que eu j&amp;aacute; tive um desafio, que tal passar voc&amp;ecirc;s tentarem deixar o arquivo xml igual o abaixo?&lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1m2MX6l6qOwPU1xIAO0KNPclbwVBj0Fu1dFP3iFiVl2ttuc-nifghXAeE1a3dJhzEgT_e8qPoroRqi-kwRilr97iGR-Ji22YX_rK3eCCUf7ZBLovreO5HulcCGi9G8tdyjtrMsWd9OzNgY6LbdDlYBlA/06[3]%2011F06F9D.gif"&gt;&lt;img border="0" width="594" src="https://oggura.bay.livefilestore.com/y1mGxmi6Fl6gbWuv2BRIFUlcmQQO3zZLTmHeePHZ0_KUFiw27fqGteqEhIZ_G-KGe98ehe-w2VZLz_TTP221IO7oJVZDlLDiXngcaez2b1WV8qgV_HpQdRsZGA_yRDAN5P1iAiSbHsOd8AdAT9NdJl3gg/06_thumb[1]%205A8C2D78.gif" alt="06" height="327" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" title="06" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Refer&amp;ecirc;ncia&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.w3schools.com/XML/xml_namespaces.asp"&gt;[ W3Schools &amp;ndash; Xml Namespaces ]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Espero que tenham gostado,&lt;br /&gt;[]&amp;rsquo;s&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=50" width="1" height="1"&gt;</description><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/Serializar/default.aspx">Serializar</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/xml/default.aspx">xml</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/serialize/default.aspx">serialize</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/prefixo/default.aspx">prefixo</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/namespace/default.aspx">namespace</category></item><item><title>Auto Complete com Highlight no ASP .NET AJAX</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/02/auto-complete-com-highlight-no-asp-net-ajax.aspx</link><pubDate>Tue, 02 Jun 2009 12:38:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:44</guid><dc:creator>Abdul Hade</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=44</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/02/auto-complete-com-highlight-no-asp-net-ajax.aspx#comments</comments><description>&lt;div class="BlogPostContent"&gt;
&lt;p align="justify"&gt;O ASP .NET AJAX nos trouxe um leque de facilidades para deixar nossas aplica&amp;ccedil;&amp;otilde;es com uma melhor experi&amp;ecirc;ncia do usu&amp;aacute;rio. E o mais legal de tudo, &amp;eacute; que conseguimos agregar mais funcionalidades a ele, alterando seu c&amp;oacute;digo fonte e criando uma nova vers&amp;atilde;o da DLL. No meu caso, foi um pouco diferente. Eu precisava fazer com que, conforme a pessoa iria digitando, na lista abaixo, o texto ficasse em negrito, e para isso eu apenas criei um JavaScript, n&amp;atilde;o precisando gerar outra DLL do AJAX. Para entender melhor, veja a imagem abaixo:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;img border="0" width="118" src="https://mvpr5q.bay.livefilestore.com/y1mydMajNFRHmsRfPfij0NiZyEODiwy1siXIaAgQlqGvMz3zB7odat_XF-xkMnx_4SZ-SprlLAzdTfQ6elnk-vcun5dfMB5p1Jtylkis-IO0y8ngpBR1B0GA4FN5vM4-ERf_rxSgesR1SA/clip_image002[4].jpg" alt="clip_image002" height="217" style="display:inline;border-width:0px;" title="clip_image002" /&gt;&lt;/p&gt;
&lt;b&gt;&lt;/b&gt;
&lt;p align="justify"&gt;&lt;b&gt;Figura 01&lt;/b&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Note na &lt;b&gt;Figura 01,&lt;/b&gt; que conforme eu vou digitando, o mesmo texto fica em negrito, e &amp;eacute; isso que iremos fazer agora.&lt;/p&gt;
&lt;p align="justify"&gt;Vamos supor que voc&amp;ecirc; j&amp;aacute; tenha criado o seu projeto, adicionado o seu controle AutoCompleteExtender, configurado seu Webservice, ou seja, o necess&amp;aacute;rio para que ele funcione corretamente.&lt;/p&gt;
&lt;p align="justify"&gt;Finalizando isso, iremos adicionar a seguinte classe na CSS:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:#a31515;"&gt;.AutoComplete_ListItemHighlightText &lt;/span&gt;{
    &lt;span style="color:red;"&gt;font-weight&lt;/span&gt;:&lt;span style="color:blue;"&gt;bold&lt;/span&gt;;
}&lt;/pre&gt;
&lt;pre class="code"&gt;E depois iremos adicionar os seguintes m&amp;eacute;todos em &amp;ldquo;JavaScript&amp;rdquo;:&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function &lt;/span&gt;ClientPopulated(source, eventArgs) {

    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(source._currentPrefix != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) {

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;list = source.get_completionList();
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;search = source._currentPrefix.toLowerCase();

        &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;i = 0; i &amp;lt; list.childNodes.length; i++) {

            &lt;span style="color:blue;"&gt;var &lt;/span&gt;text = list.childNodes&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;.innerHTML; 
            &lt;span style="color:blue;"&gt;var &lt;/span&gt;index = RetiraAcentos(text).toLowerCase().
                    indexOf(RetiraAcentos(search).toLowerCase());

            &lt;span style="color:blue;"&gt;if &lt;/span&gt;(index != -1) {

                &lt;span style="color:blue;"&gt;var &lt;/span&gt;value = text.substring(0, index);
                value += &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;span class=&amp;quot;AutoComplete_ListItemHighLightText&amp;quot;&amp;gt;&amp;#39;&lt;/span&gt;;
                value += text.substr(index, search.length);
                value += &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/span&amp;gt;&amp;#39;&lt;/span&gt;;
                value += text.substring(index + search.length);

                list.childNodes&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;.innerHTML = value;

            }

        }
    
    }

} &lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;&amp;nbsp;O m&amp;eacute;todo acima aplica a classe AutoComplete_ListItemHighLightText nos itens da lista que contenham o texto procurado.&lt;/p&gt;
&lt;p align="justify"&gt;A fun&amp;ccedil;&amp;atilde;o abaixo apenas regulariza o texto, substituindo as letras com acento para as sem acento. Ela &amp;eacute; necess&amp;aacute;ria, por que nem sempre os itens listados no AutoComplete est&amp;atilde;o com acento, ou seja, escritos corretamente. Voltando na &lt;b&gt;Figura 01&lt;/b&gt;, podemos perceber que mesmo digitando apenas a palavra &amp;ldquo;sao&amp;rdquo;, a fun&amp;ccedil;&amp;atilde;o destaca tamb&amp;eacute;m os &amp;ldquo;s&amp;atilde;o&amp;rdquo;, e &amp;eacute; gra&amp;ccedil;as a esse m&amp;eacute;todo que isso acontece.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function &lt;/span&gt;RetiraAcentos(txt) {

    &lt;span style="color:blue;"&gt;var &lt;/span&gt;Acentos = &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;aacute;&amp;agrave;&amp;atilde;&amp;acirc;&amp;acirc;&amp;Aacute;&amp;Agrave;&amp;Atilde;&amp;Acirc;&amp;eacute;&amp;ecirc;&amp;Eacute;&amp;Ecirc;&amp;iacute;&amp;Iacute;&amp;oacute;&amp;otilde;&amp;ocirc;&amp;Oacute;&amp;Ocirc;&amp;Otilde;&amp;uacute;&amp;uuml;&amp;Uacute;&amp;Uuml;&amp;ccedil;&amp;Ccedil;abcdefghijklmnopqrstuvxwyz&amp;quot;&lt;/span&gt;;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;Traducao =&lt;span style="color:#a31515;"&gt;&amp;quot;AAAAAAAAAEEEEIIOOOOOOUUUUCCABCDEFGHIJKLMNOPQRSTUVXWYZ&amp;quot;&lt;/span&gt;;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;Posic, Carac;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;TempLog = &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;value = txt.toUpperCase();

    &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;i=0; i &amp;lt; txt.length; i++) {
        
        Carac = value.charAt(i);
        Posic = Acentos.indexOf(Carac);

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(Posic &amp;gt; -1)
            TempLog += Traducao.charAt(Posic);
        &lt;span style="color:blue;"&gt;else
            &lt;/span&gt;TempLog += value.charAt(i);
    }

    &lt;span style="color:blue;"&gt;return &lt;/span&gt;TempLog;

}&lt;/pre&gt;
&lt;p&gt;E essa trata o conteudo selecionado, ou seja, preenche o campo com o item selecionado.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function &lt;/span&gt;itemSelected(source, ev) {

    &lt;span style="color:blue;"&gt;var &lt;/span&gt;index = source._selectIndex;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;dd = source.get_completionList().childNodes[index]._value;
    source.get_element().value = dd;
}&lt;/pre&gt;
&lt;p&gt;E agora iremos atribuir o m&amp;eacute;todo ClientPopulated no evento OnClientPopulated e itemSelected no evento OnClientItemSelected do controle AutoCompleteExtender.&lt;/p&gt;
&lt;p&gt;Pronto! Seu controle est&amp;aacute; mais completo. Agora &amp;eacute; esperar que nas futuras vers&amp;otilde;es isso seja agregado ao Framework do ASP .NET AJAX. &lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=44" width="1" height="1"&gt;</description><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/AutoComplete/default.aspx">AutoComplete</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/HighLight/default.aspx">HighLight</category></item><item><title>.NET Framework – Parte II: Entendendo um pouco mais</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/02/net-framework-parte-ii-entendendo-um-pouco-mais.aspx</link><pubDate>Tue, 02 Jun 2009 12:27:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:42</guid><dc:creator>Abdul Hade</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=42</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/02/net-framework-parte-ii-entendendo-um-pouco-mais.aspx#comments</comments><description>&lt;p&gt;J&amp;aacute; vimos para o que &amp;eacute; utilizada a ferramenta, como ela funciona e agora iremos ver o que &amp;eacute; cada componente no artigo &lt;a target="_blank" href="http://buildbrasil.org/blogs/dotnet/archive/2009/06/01/net-framework-parte-i.aspx" title=".NET Framework &amp;ndash; Parte I"&gt;.NET Framework &amp;ndash; Parte I&lt;/a&gt;&lt;b&gt;.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Common Language Specification &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Como tudo deve ter um padr&amp;atilde;o e regras a serem cumpridas, as linguagens suportadas pela ferramenta tamb&amp;eacute;m tem, e por isso que, quando temos duas aplica&amp;ccedil;&amp;otilde;es feitas em linguagens diferentes, n&amp;atilde;o temos problemas em conseguir usar os recursos desenvolvidos em uma na outra. E esses padr&amp;otilde;es e regras s&amp;atilde;o baseados no CTS (Common Type System). No CTS podemos encontrar regras de nomenclatura, defini&amp;ccedil;&amp;otilde;es para letras mai&amp;uacute;sculas e min&amp;uacute;sculas, palavra-chave, tipos, m&amp;eacute;todos, propriedades, eventos, interfaces, matrizes, Enumera&amp;ccedil;&amp;otilde;es, gen&amp;eacute;ricos e etc. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Tipos de Solu&amp;ccedil;&amp;otilde;es&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Windows Forms &amp;ndash; &lt;/b&gt;S&amp;atilde;o aplica&amp;ccedil;&amp;otilde;es desenvolvidas para ambientes locais, ou seja, totalmente instaladas no computador do usu&amp;aacute;rio, como por exemplo, aplica&amp;ccedil;&amp;otilde;es Cliente/Servidor. Nesse tipo n&amp;atilde;o h&amp;aacute; necessidade de requisi&amp;ccedil;&amp;otilde;es ao servidor, a n&amp;atilde;o ser quando existe um servidor de base de dados, pelo qual o sistema acessa as informa&amp;ccedil;&amp;otilde;es para ser mostrada nos formul&amp;aacute;rios, fora isso, toda execu&amp;ccedil;&amp;atilde;o &amp;eacute; feita dentro do computador onde est&amp;aacute; instalado. Sua interface &amp;eacute; baseada em controles prontos e pr&amp;eacute;-configurados. Esses controles, al&amp;eacute;m de serem usados para visualiza&amp;ccedil;&amp;atilde;o de informa&amp;ccedil;&amp;otilde;es trazidas de uma base de dados, podem servir como entrada de texto ou na necessidade de relacionamento entre qualquer outro controle, como por exemplo, os objetos DataGridView, utilizado para mostrar, consultar ou inserir/editar/excluir as informa&amp;ccedil;&amp;otilde;es, e ComboBox. Tamb&amp;eacute;m temos as caixas de texto, caixa de multi sele&amp;ccedil;&amp;atilde;o, caixa de op&amp;ccedil;&amp;otilde;es, entre muitos outros objetos. Alguns desses controles servem apenas para melhorar a interface do aplicativo. &lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Hoje, o Windows Forms nos tr&amp;aacute;s muitas facilidades na hora de criar sua vers&amp;atilde;o de instala&amp;ccedil;&amp;atilde;o. Com apenas alguns cliques voc&amp;ecirc; consegue cria - l&amp;aacute;, e ainda podemos publicar em algum lugar onde os usu&amp;aacute;rios de uma rede possam acessar as futuras vers&amp;otilde;es, por que a atualiza&amp;ccedil;&amp;atilde;o &amp;eacute; feita automaticamente antes ou depois da aplica&amp;ccedil;&amp;atilde;o ser aberta. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Web Forms &amp;ndash; &lt;/b&gt;com certeza a evolu&amp;ccedil;&amp;atilde;o na interface de p&amp;aacute;ginas de Web. Muito parecido com o Windows Forms, ele foi criado para o ASP .NET, e &amp;eacute; formado por HTML est&amp;aacute;tico e/ou controles ASP .NET. Da mesma forma que o Windows Forms, ele tamb&amp;eacute;m separa o design (HTML da p&amp;aacute;gina) do c&amp;oacute;digo-fonte, e usa o arrastar e soltar, para criar os controles dentro das p&amp;aacute;ginas, onde eles tamb&amp;eacute;m j&amp;aacute; est&amp;atilde;o pr&amp;eacute;-configurados. Hoje, esse tipo de aplica&amp;ccedil;&amp;atilde;o nos das in&amp;uacute;meras possibilidades, onde podemos desde poder arrastar controles na p&amp;aacute;gina em tempo de execu&amp;ccedil;&amp;atilde;o, mudar as cores da p&amp;aacute;gina de acordo com o gosto do usu&amp;aacute;rio, at&amp;eacute; fazer requisi&amp;ccedil;&amp;otilde;es ao servidor da aplica&amp;ccedil;&amp;atilde;o sem ter que recarregar a p&amp;aacute;gina inteira, tornando esse tipo de aplica&amp;ccedil;&amp;atilde;o sem limites de recursos, mais rica, intuitiva e muito mais f&amp;aacute;cil de usar. &lt;/p&gt;
&lt;p&gt;Tamb&amp;eacute;m nos tr&amp;aacute;s muitas facilidades quando queremos trazer informa&amp;ccedil;&amp;otilde;es de alguma base de dados. E controles como, por exemplo, RadioButtonList, DataGrid, DataList, ListBox, podemos facilmente configur&amp;aacute;-los, e &amp;agrave;s vezes somos obrigados a colocar algumas linhas de c&amp;oacute;digo, mas n&amp;atilde;o se preocupe, por que o n&amp;uacute;mero ser&amp;aacute; muito pouco. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Web Services &amp;ndash; &lt;/b&gt;se hoje n&amp;oacute;s podemos criar servi&amp;ccedil;os onde qualquer aplica&amp;ccedil;&amp;atilde;o codificada no .NET Framework pode acessar sem nenhuma restri&amp;ccedil;&amp;atilde;o, &amp;eacute; por causa dele &amp;ndash; o Web Services. Sua id&amp;eacute;ia principal &amp;eacute; justamente essa - servi&amp;ccedil;os Web &amp;ndash; nos possibilitando, as aplica&amp;ccedil;&amp;otilde;es se comunicarem sem qualquer limite. E para tornar isso poss&amp;iacute;vel, a tecnologia trabalha com SOAP (Simple Object Access Protocol)&lt;b&gt;, &lt;/b&gt;autorizada pelo W3C, &amp;eacute; ela que torna poss&amp;iacute;vel a comunica&amp;ccedil;&amp;atilde;o entre esses servi&amp;ccedil;os, utilizando o XML como meio de transporte das informa&amp;ccedil;&amp;otilde;es e o HTML para transferir os dados. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Tipos de acesso a dados&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;E por sua causa que temos muitas facilidades e pouco tempo de desenvolvimento na hora de criarmos os objetos de acesso a dados. &amp;Eacute; ele quem torna poss&amp;iacute;vel a utiliza&amp;ccedil;&amp;atilde;o de in&amp;uacute;meros tipos de base de dados como, por exemplo, banco de dados SQL Server, ORACLE entre outros, arquivos XML, texto ou planilhas do EXCEL, ou cole&amp;ccedil;&amp;atilde;o de objetos. &lt;/p&gt;
&lt;p&gt;Mas as reais funcionalidades n&amp;atilde;o s&amp;atilde;o apenas acessar esses milhares tipos de base de dados, e sim &amp;eacute; que podemos fazer as consultas, inser&amp;ccedil;&amp;atilde;o, pagina&amp;ccedil;&amp;atilde;o, exclus&amp;atilde;o e altera&amp;ccedil;&amp;atilde;o dos dados contidos nelas, com uma facilidade imensa, tornando mais ainda r&amp;aacute;pida a forma de program&amp;aacute;-las, deixando sua mente focada nas regras de neg&amp;oacute;cio mais importantes. &lt;/p&gt;
&lt;p&gt;Definindo melhor, podemos dizer que existem os controles de acesso a dados que fazem alguma a&amp;ccedil;&amp;atilde;o para trazer essas informa&amp;ccedil;&amp;otilde;es. SQLDataSource, ObjectDataSource e XMLDataSource s&amp;atilde;o os principais objetos de conex&amp;atilde;o a esses dados, um para apenas SQL, outro apenas para uma lista de objetos qualquer e a outra para utilizar com arquivos XML, respectivamente, como sua origem de dados. J&amp;aacute; os controles DataList, DetailsView, DataGrid entre outros, s&amp;atilde;o os respons&amp;aacute;veis por fazer essa requisi&amp;ccedil;&amp;atilde;o e mostrar essas informa&amp;ccedil;&amp;otilde;es, independentemente do tipo da base de dados, e os quais utilizam os objetos de acesso para isso. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Biblioteca de Classes&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Objetos na tela, meios de acesso a base de dados, valida&amp;ccedil;&amp;otilde;es em geral e/ou qualquer fun&amp;ccedil;&amp;atilde;o ou tipo de objeto que voc&amp;ecirc; queira, faz parte dessa biblioteca. Na verdade, isso &amp;eacute; a base do .NET Framework, ou seja, &amp;eacute; por causa delas que podemos, t&amp;atilde;o rapidamente, desenvolver uma tela trazendo dados do banco, editar suas informa&amp;ccedil;&amp;otilde;es, fazer c&amp;aacute;lculos entre in&amp;uacute;meras outras coisas. &lt;/p&gt;
&lt;p&gt;Mais abaixo, iremos falar sobre as classes mais conhecidas e usadas do .NET Framework. 
&lt;table border="1" cellpadding="0" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;&lt;b&gt;Namespace&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;&lt;b&gt;Descri&amp;ccedil;&amp;atilde;o&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;&amp;Eacute; a base de todas as classes, sem ela definida, seu c&amp;oacute;digo n&amp;atilde;o ser&amp;aacute; nada, ou seja, voc&amp;ecirc; n&amp;atilde;o conseguir&amp;aacute; codificar. E como voc&amp;ecirc;s ir&amp;atilde;o ver mais abaixo, ela &amp;eacute; sempre a primeira a aparecer antes de chamar qualquer outra. Resumindo, ela &amp;eacute; a namespace m&amp;atilde;e das outras.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Collection;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Todo tipo de cole&amp;ccedil;&amp;atilde;o, faz parte dessa namespace. Cole&amp;ccedil;&amp;otilde;es de objetos, interfaces, dicion&amp;aacute;rios, ou seja, qualquer cole&amp;ccedil;&amp;atilde;o que voc&amp;ecirc; imaginar, pode procurar aqui. &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Data;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Conex&amp;atilde;o com o banco, objetos relacionados a executar comandos de qualquer tipo ou relacionamento, componentes de gerenciamento em geral de banco de dados, ou seja, toda a estrutura do ADO .NET.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Diagnostics;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Permite-nos diagnosticar nossa depura&amp;ccedil;&amp;atilde;o e buscar execu&amp;ccedil;&amp;atilde;o de c&amp;oacute;digo, e tamb&amp;eacute;m nos oferece classes que atuam como contadores de desempenho, com processos do sistema operacional e log de eventos.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Drawing;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;M&amp;atilde;e de todas as classes e namespaces de gr&amp;aacute;ficos GDI+. Quando voc&amp;ecirc; quiser desenhar algo na tela, tanto em duas como em tr&amp;ecirc;s dimens&amp;otilde;es, pense nesse grupo de classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Globalization;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Informa&amp;ccedil;&amp;otilde;es de linguagens, culturas, padr&amp;otilde;es de formata&amp;ccedil;&amp;atilde;o, ordem de caracteres, moeda, ou seja, quando voc&amp;ecirc; quiser desenvolver um sistema multi linguagem, n&amp;oacute;s usaremos esse conjunto de fun&amp;ccedil;&amp;otilde;es para nos ajudar na configura&amp;ccedil;&amp;atilde;o desses elementos.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.IO;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Quando queremos ler ou salvar um arquivo de forma, tanto quando a origem e o destino est&amp;atilde;o sincronizados como quando n&amp;atilde;o est&amp;atilde;o.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Media;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Iremos utiliz&amp;aacute;-la quando trabalhamos com som dentro de nossa aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Net;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Possibilita-nos usar de maneira f&amp;aacute;cil e r&amp;aacute;pida os v&amp;aacute;rios protocolos de redes que existem hoje em dia. Tamb&amp;eacute;m contamos com classes para envio e recebimento de e-mail.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Security;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;&amp;Eacute; composta por classes que ir&amp;atilde;o cuidar da seguran&amp;ccedil;a de sua aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Text;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Tipos de enconding, ASCII, conversores em geral e formata&amp;ccedil;&amp;atilde;o de textos est&amp;atilde;o contidas nessa namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Web;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Conjunto de classes e interfaces base de uma p&amp;aacute;gina Web. Podemos tamb&amp;eacute;m encontrar classes de gerenciamento de cookies, envio de arquivos, cach&amp;ecirc; e etc.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="158" valign="top"&gt;
&lt;p&gt;System.Xml;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="523" valign="top"&gt;
&lt;p&gt;Para gerenciamento de arquivos de XML, voc&amp;ecirc; pode contar com esse grupo de classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Enfim, s&amp;atilde;o in&amp;uacute;meras as namespaces que formam .NET Framework. Hoje, ele nos da tantas funcionalidades, que talvez seja imposs&amp;iacute;vel n&amp;oacute;s desenvolvedores imaginar algo que ele n&amp;atilde;o possa fazer. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Common Language Runtime&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Sua fun&amp;ccedil;&amp;atilde;o &amp;eacute; de criar uma m&amp;aacute;quina virtual toda vez que uma aplica&amp;ccedil;&amp;atilde;o &amp;eacute; executada em desenvolvimento. Quando executamos uma aplica&amp;ccedil;&amp;atilde;o, todo c&amp;oacute;digo escrito passa pelo compilador, que &amp;eacute; transformado em a Assembly, ou seja, ele traduz em Common Intermediate Language (CIL), e o CRL transforma em c&amp;oacute;digo que o sistema operacional possa entender. Explicando de forma f&amp;aacute;cil, ele &amp;eacute; quem traduz o c&amp;oacute;digo, seja ele escrito em qualquer linguagem de programa&amp;ccedil;&amp;atilde;o suportada pelo .NET Framework, para a linguagem de m&amp;aacute;quina. E tamb&amp;eacute;m &amp;eacute; respons&amp;aacute;vel pela possibilidade das linguagens interagirem entre si, e isso acontece por que existe um padr&amp;atilde;o chamado CLS, o qual n&amp;oacute;s j&amp;aacute; vimos. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclus&amp;atilde;o&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Espero que todos tenham entendido como funciona cada parte do .NET Framework, continuaremos com a hist&amp;oacute;ria dele no pr&amp;oacute;ximo artigo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=42" width="1" height="1"&gt;</description></item><item><title>Explorando Data/Hora</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/02/explorando-data-hora.aspx</link><pubDate>Tue, 02 Jun 2009 11:53:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:41</guid><dc:creator>Abdul Hade</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=41</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/02/explorando-data-hora.aspx#comments</comments><description>&lt;div&gt;
&lt;div align="left"&gt;&lt;span style="font-size:x-small;"&gt;&lt;strong&gt;Especifica&amp;ccedil;&amp;otilde;es:&lt;/strong&gt; Visual Studio 2005 Professional&lt;strong&gt;; Linguagem:&lt;/strong&gt; CSharp. &lt;br /&gt;&lt;br /&gt;Abdul Hade &lt;br /&gt;Nesse artigo mostro alguns exemplos do que pode ser feito com um campo data/hora. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Diferen&amp;ccedil;as entre datas&lt;/strong&gt; &lt;br /&gt;Para obtermos intervalo entre duas datas primeiramente, criamos um novo projeto, e no formul&amp;aacute;rio, adicionamos dois DateTimePicker, dois Label e um Button, de modo que fique como a &lt;strong&gt;Figura 1.&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;img src="http://tkfiles.storage.msn.com/x1pjzF2-RYhxRWnKgpaDjTW1MmRT_CUoOuoliAmBHUwu7m-Q1RtM2qL53i2vffJjPcAcejV3BxEJufPd-ZDuED-Ni-aaJLjELmBttsEBIOSjk4" alt="" /&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:xx-small;"&gt;Figura 1.&lt;/span&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;No bot&amp;atilde;o, insira o seguinte c&amp;oacute;digo-fonte: &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#009900;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//Cria uma vari&amp;aacute;vel do tipo &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#3366ff;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DateTime&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; a preenche ela com o valor do &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#3366ff;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DateTimePicker&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DateTime&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:black;"&gt;MesAno =&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Convert&lt;/span&gt;&lt;span style="color:Black;"&gt;.ToDateTime(MesAnoDateTimePicker.Text);&lt;span style="COLOR:white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;Total de dias de um m&amp;ecirc;s especifico&lt;/strong&gt; &lt;br /&gt;&amp;Eacute; apenas uma linha. Existe uma classe para isso: &lt;br /&gt;Vamos criar uma form e deix&amp;aacute;-lo igual &amp;agrave; &lt;strong&gt;Figura 2&lt;/strong&gt;:&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;a&gt;&lt;/a&gt;&lt;img src="http://tkfiles.storage.msn.com/x1pjzF2-RYhxRWnKgpaDjTW1KBYZgoASCcu5EytjbAml9TQv5kYdLPeAyogresD8Q1ErNUrbf1HKOkHXssKkukIq-Vt6hfiExfrAtPv8mIOKg1pfAIsKD63tg" alt="" /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;strong&gt;Figura 2.&lt;/strong&gt; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;E insira o c&amp;oacute;digo abaixo no bot&amp;atilde;o: &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Soma de Horas:&lt;/strong&gt; Essa &amp;eacute; um pouco complicada, mas &amp;eacute; muito interessante. Primeiro crie um form, deixando-o como a &lt;strong&gt;figura3&lt;/strong&gt;: &lt;br /&gt;&lt;a&gt;&lt;img border="0" src="http://tkfiles.storage.msn.com/x1pjzF2-RYhxRWnKgpaDjTW1OJcFkXvhPEuaGwBvkU_4cQy82vTgGVm-y5_16JZa0cp1ODSD7-o4Qz2Wj7fokFIzfkpVODBK6Ws11nUW6xP3Nw" style="CURSOR:hand;" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;strong&gt;Figura 3.&lt;/strong&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Depois adicione a fun&amp;ccedil;&amp;atilde;o abaixo a sua classe de neg&amp;oacute;cios: &lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//Com o System.&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DateTime&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;.DaysInMonth(Ano selecionado no objeto, Mes selecionado no objeto)&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;MessageBox&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:black;"&gt;.Show(System.&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;DateTime&lt;/span&gt;&lt;span style="color:black;"&gt;.DaysInMonth(MesAno.Year, MesAno.Month).ToString());&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:black;"&gt;SomaHoras(&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;Data1,&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;Data2)&lt;span style="COLOR:white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; {&lt;/span&gt;&amp;nbsp;&lt;/span&gt;Pronto! Fico por aqui, at&amp;eacute; o pr&amp;oacute;ximo artigo. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclus&amp;otilde;es&lt;/strong&gt; &lt;br /&gt;Enfim, com data e hora podemos fazer uma infinidade opera&amp;ccedil;&amp;otilde;es, mais para frente faremos isso. &lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Vari&amp;aacute;veis e os valores para o c&amp;aacute;lculo */&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;int&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;Hora1 = Data1.Hour, Hora2 = Data2.Hour, Min1 = Data1.Minute,&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Min2 = Data2.Minute, Seg1 = Data1.Second, Seg2 = Data2.Second,&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TotalHoras = 0, TotalMin = 0, TotalSeg = 0;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Atribui a soma dos segundos a TotalSeg*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TotalSeg = Seg1 + Seg2;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Se o total da soma for igual ou maior o que 60, ent&amp;atilde;o &amp;eacute; considerado como minuto*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;(TotalSeg &amp;gt;= 60)&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Se sim, &amp;eacute; jogado o valor &amp;#39;1&amp;#39;*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TotalMin = 1;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*e lhe &amp;eacute; subtraido 60 segundos*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:black;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TotalSeg = TotalSeg - 60;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Soma entre os minutos e teremos o total de minutos*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TotalMin += Min1 + Min2;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Se o total da soma for igual ou maior o que 60, ent&amp;atilde;o &amp;eacute; considerado como Hora*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;(TotalMin &amp;gt;= 60)&lt;/span&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Se sim, &amp;eacute; jogado o valor &amp;#39;1&amp;#39;*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TotalHoras = 1;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*e lhe &amp;eacute; subtraido 60 minutos*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:#000000;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;TotalMin = TotalMin - 60;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:#000000;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Depois somamos as horas, se quizer fazer mais um if para as horas fique a vontade*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TotalHoras += Hora1 + Hora2;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Retorna a soma entre as duas horas*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;.Format(&lt;/span&gt;&lt;span style="COLOR:maroon;"&gt;&lt;span style="color:#ff0000;"&gt;&amp;quot;{0}:{1}:{2}&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;, TotalHoras.ToString(&lt;/span&gt;&lt;span style="COLOR:maroon;"&gt;&lt;span style="color:#ff0000;"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;),&lt;span style="COLOR:white;"&gt; &lt;/span&gt;TotalMin.ToString&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;), TotalSeg.ToString(&lt;/span&gt;&lt;span style="COLOR:maroon;"&gt;&lt;span style="color:#ff0000;"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;)));&lt;span style="COLOR:white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;" lang="PT-BR"&gt;Agora adicione esse c&amp;oacute;digo ao bot&amp;atilde;o:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;partial&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;class&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;FormDtHr&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:black;"&gt;:&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Form&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;{&lt;/span&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//Declara a sua classe de neg&amp;oacute;cios para acessar as fun&amp;ccedil;oes.&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;ClassNegocios&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:black;"&gt; Funcoes =&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ClassNegocios&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;" lang="PT-BR"&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;void&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:black;"&gt;SomarButton_Click(&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;object&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;sender,&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;EventArgs&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;e)&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;/*Mostra em uma mensagem o retorno da fun&amp;ccedil;&amp;atilde;o que foi criada, passando as duas datas*/&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;MessageBox&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:black;"&gt;.Show(Funcoes.SomaHoras(&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Convert&lt;/span&gt;&lt;span style="color:black;"&gt;.ToDateTime(Vl1DateTimePicker.Text),&lt;/span&gt;&lt;span style="COLOR:white;"&gt; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Convert&lt;/span&gt;&lt;span style="color:black;"&gt;.ToDateTime(Vl2DateTimePicker.Text)).ToString());&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;" lang="PT-BR"&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//Cria uma variavel do tipo &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#3366ff;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DateTime&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;, que ser&amp;aacute; preenchida com um valor da &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//tabela, que ser&amp;aacute; convertido em &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#3366ff;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;Datetime&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;.&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DateTime&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="color:black;"&gt;DTInicial =&lt;/span&gt; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Convert&lt;/span&gt;&lt;span style="color:black;"&gt;.ToDateTime(IniDateTimePicker.Text);&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//Cria uma variavel do tipo TimeSpan, que receber&amp;aacute; a subtra&amp;ccedil;&amp;atilde;o &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;//DTFinal - DTInicial = DTResultado.&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;TimeSpan&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:white;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;DTResultado = DTFinal.Subtract(DTInicial);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;// Mostra uma mensagem intervalo entre as duas datas.&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;MessageBox&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;.Show(DTResultado.ToString());&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;" lang="PT-BR"&gt;// Utilizei o DateTimePicker, por que com ele, n&amp;atilde;o tenho problema com rotinas para valida&amp;ccedil;&amp;atilde;o de data.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=41" width="1" height="1"&gt;</description><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/DateTimePicker/default.aspx">DateTimePicker</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/Hora/default.aspx">Hora</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/Data/default.aspx">Data</category><category domain="http://buildbrasil.org/blogs/csharp/archive/tags/Datetime/default.aspx">Datetime</category></item><item><title>Criando Log com a Enterprise Library</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/criando-log-com-a-enterprise-library.aspx</link><pubDate>Tue, 02 Jun 2009 01:47:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:39</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=39</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/criando-log-com-a-enterprise-library.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Hoje vou comentar um assunto que muito me agrada no processo de desenvolvimento. &lt;br /&gt;A cria&amp;ccedil;&amp;atilde;o de log&amp;rsquo;s. Os log&amp;rsquo;s s&amp;atilde;o de extrema import&amp;acirc;ncia em qualquer aplica&amp;ccedil;&amp;atilde;o.&lt;br /&gt; Atire a primeira pedra aquele que nunca deu um Response.Write no ambiente de produ&amp;ccedil;&amp;atilde;o com a fonte na cor branca? &lt;/p&gt;
&lt;p&gt;Quem j&amp;aacute; fez, com certeza deve estar morrendo de rir neste exato momento.&lt;br /&gt;Quem n&amp;atilde;o fez, deve estar pensando: &amp;rdquo;Putz, como eu nunca pensei nisso antes?&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;Pensando nisso eu decidi criar um post introdut&amp;oacute;rio em como usar a biblioteca &lt;br /&gt;Microsoft.Practices.EnterpriseLibrary.Logging. Ent&amp;atilde;o vamos ao que interessa e criar uma aplica&amp;ccedil;&amp;atilde;o. &lt;/p&gt;
&lt;p&gt;O primeiro passo &amp;eacute; criar um projeto do tipo &amp;ldquo;Web Application&amp;rdquo;. D&amp;ecirc; um nome ao projeto que mais agrade voc&amp;ecirc;. Eu criei como &amp;ldquo;ArtigoLog_EL&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;Com o projeto criado, temos que adicionar 3 dll&amp;rsquo;s ao projeto: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft.Practices.EnterpriseLibrary.Common  &lt;/li&gt;
&lt;li&gt;Microsoft.Practices.EnterpriseLibrary.Logging  &lt;/li&gt;
&lt;li&gt;Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.Design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mJOCwsd4D-CuhY8EjdGVQ0pHHH_Hyg0GbUXvZ7UgANXmkiAPDfgcTISw7m0H7Pa-Mdm64mWMUpWqjOqQOlb0HddoTlKwfCGtyuj7mGd5_cqfZfdIoWgs0LPpT5FRUx8kK87VXQy65Ij6JKMI0pZCQ3A/01[3]%206275F291.gif" rel="WLPP"&gt;&lt;img title="01" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="261" alt="01" src="https://oggura.bay.livefilestore.com/y1mnxIsNwLIEkfK0EsrrkajJiJRt0iN9JY9M5kMaS2TeXCF-xB7XzKkydR660OtGscjuPKzO_Zodw9qvtqAk3J2AnATVBWbhlL7hyTyMDeeNYRA_3r1rKYUVwTVl6D0qSYRWs2xMvFU8uM_VScYZso9bQ/01_thumb[3]%204CFD12F1.gif" width="429" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;O pr&amp;oacute;ximo passo &amp;eacute; configurar os par&amp;acirc;metros do Log. Para isso clicamos com o bot&amp;atilde;o direito em cima do arquivo &amp;ldquo;Web.config&amp;rdquo; e selecionar a op&amp;ccedil;&amp;atilde;o &amp;rdquo;Edit Enterprise Library Configuration&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;img height="244" src="https://oggura.bay.livefilestore.com/y1mH-0OkbcFap5AfB3LeoOV1TFvSH-NEkKf8bii01wtIOFLtVdXRxrAYQI60_uq54ppGYa6zaI6nnQbYBIv8Hvd0PQTO6feIZL9tFo2wYabPKD3Jy-hDJZcV8lMDj4xf0mAtHRPlqk4UKgCprY4ktqnmg/01_thumb[1]%2027AF7FB4.gif" width="249" alt="" /&gt;  &lt;/p&gt;
&lt;p&gt;Essa a&amp;ccedil;&amp;atilde;o ir&amp;aacute; fazer com que a tela de configura&amp;ccedil;&amp;atilde;o apare&amp;ccedil;a. &lt;/p&gt;
&lt;p&gt;&lt;img height="161" src="https://oggura.bay.livefilestore.com/y1mDe6XJ9Zc2krN5oCFEzRtKh6TmViJdd1cBXSCBuJJ1CSFp3tIVTRDyiMaCQ6dd4TFzTA1c5LDnHT9NSQTcUDqNXXvAF1g4k_589wty3TNONlfEfeuBP0AY0H9NXVg24d4JGnuXqnavdCrD8p4l-W5QQ/02_thumb[1]%205634A122.gif" width="283" alt="" /&gt;  &lt;/p&gt;
&lt;p&gt;A tela &amp;eacute; bem direta e simples. Nessa tela podemos configurar qualquer objeto quando se trata de Enterprise Library.  &lt;/p&gt;
&lt;p&gt;O passo seguinte ser&amp;aacute; criar o bloco de configura&amp;ccedil;&amp;atilde;o para log.&lt;br /&gt; Para criar esse bloco, devemos clicar com o bot&amp;atilde;o direito do mouse em cima da pasta de configura&amp;ccedil;&amp;atilde;o, em seguida em &amp;ldquo;New&amp;rdquo; e depois em &amp;ldquo;Logging Application Block&amp;rdquo;.  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mbQUujny6El8wOn_IO406htig5-ZNXHH_8p6zEX0SC1oKZfF_0tF0MuQP8s4G_DopwHoo15VkqND40Bexf7ZjO5zE8MahHh7Ma9KeejSHJey4quRREPFDas-clW2YJwIvIJ0MMwYtoy3HvS67izQfBQ/03[4].gif" rel="WLPP"&gt;&lt;img title="03" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="248" alt="03" src="https://oggura.bay.livefilestore.com/y1mLrRZy5fD_eNHoBdx-vIgtcxNRlUi-ymDxFVeH17qpv3aLmfkRyjbydmmkK5T859im3bkw00Np8m9jbtdKBcvgSk6khUCWTY8sylO1wgkD4pdjnfwhF2rO-AA4_K8c39DI3uiCwVMn7RZE9i_sV-SdA/03_thumb[3]%207323806A.gif" width="499" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Quando o logging application block &amp;eacute; criado, uma configura&amp;ccedil;&amp;atilde;o padr&amp;atilde;o &amp;eacute; criada.&lt;br /&gt; Como o nosso intuito aqui &amp;eacute; aprender, vamos limpar toda a configura&amp;ccedil;&amp;atilde;o e deixar igual &amp;agrave; imagem abaixo:  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mOSrErubyvwE-7b-DAZ5r7Takxr8fPDMQMKkrMcYpMKdEzpy7zKChG7fWKLs-nv_oc5ifhjavDgdAkN9QK8bH6BSu32mRIu6_qsKZnc2-F1mW1HqrGfqPDUkgQ6-R05pm3xDjLXZGBKORhBh14an6IA/04[3]%200958DA16.gif" rel="WLPP"&gt;&lt;img title="04" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="182" alt="04" src="https://oggura.bay.livefilestore.com/y1m8YgIGIXmGpHXf_6RkFR0B3O0g2W6FoXlH4yaWmzBxcFh1xBtBCOjcsxTTm_5LIXv7lu74Pmiqo_pJwu_ZyjKwsjkHLDmq1HwATx6uMPnLWmja-qg2tcurlj8BY40d0PmWbRx2dWy963L3M8tJKaJ1A/04_thumb[3]%2009A75222.gif" width="215" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Voc&amp;ecirc;s podem notar abaixo que apenas uma configura&amp;ccedil;&amp;atilde;o n&amp;atilde;o foi removida, a configura&amp;ccedil;&amp;atilde;o dos formatos. A imagem abaixo mostra o porque n&amp;atilde;o foi apagada.  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mGlqXlnJgZzjTg3I6FNU20szx7UV7axae87VmvQcMlhlEzQ3kxswWhNQ2H7_6qf9oR4I2znjRCz1lcZ0iC8R9syVqsxQkfZF71L0kPJijPY-8zIiK7bolACgo8aCzVsbn4812236g9euTWngRqBZX7A/05[4].gif" rel="WLPP"&gt;&lt;img title="05" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="351" alt="05" src="https://oggura.bay.livefilestore.com/y1mH8nTlJHt2OQZmrWVk0NYYA960XfQYiAcqU3c29On0DQMVQW54VbTaMZAvhvl_vTycvWfoF80MsDSe58qZF0MqF9amnKPaYhQouc6FZ7npffzrZXv8xdivIz3IK5K_JEPbVz4q6Wnk9VVac0dkJvO9A/05_thumb[3]%2072AA0415.gif" width="456" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;O motivo &amp;eacute; por que ela j&amp;aacute; vem com todas as informa&amp;ccedil;&amp;otilde;es &amp;uacute;teis para descobrirmos qual a origem do erro. Como tem as informa&amp;ccedil;&amp;otilde;es que precisamos, n&amp;atilde;o vamos mudar. Como diz o ditado &amp;ldquo;Em time que est&amp;aacute; ganhando n&amp;atilde;o se meche&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;O pr&amp;oacute;ximo passo &amp;eacute; criar um &amp;ldquo;Trace Listeners&amp;rdquo;. Esse cara &amp;eacute; respons&amp;aacute;vel em gerar um output das informa&amp;ccedil;&amp;otilde;es. Ou seja, Ele vai salvar a string da mensagem template (imagem acima). Para saber quais s&amp;atilde;o as formas poss&amp;iacute;veis, clique com o bot&amp;atilde;o direito do mouse sobre o &amp;ldquo;Trace Listener&amp;rdquo; em seguida em &amp;ldquo;New&amp;rdquo;. Uma lista com as op&amp;ccedil;&amp;otilde;es ser&amp;aacute; mostrada. Para saber mais sobre as op&amp;ccedil;&amp;otilde;es visite a se&amp;ccedil;&amp;atilde;o &amp;ldquo;Refer&amp;ecirc;ncia&amp;rdquo; no final deste artigo. Para demonstrar o funcionamento, vou usar a op&amp;ccedil;&amp;atilde;o &amp;ldquo;Flat File Trace Listener&amp;rdquo;, que nada mais &amp;eacute; do que um txt comum. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mrfsJDgFSiONQYy73B2CB_-FKyWcnRfHDedzu2MB4ixL4n4VzJ5QYAucDxsbEuEky5kGQ_FC8aqhuua55zi6-PaLvv_whxvMK_2dDIjRcvAXjKi2Q4LsdjFSkM0AZaQl44Z4Cc6eUzOSG6w-d2U4lPg/06[4].gif"&gt;&lt;img title="06" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="200" alt="06" src="https://oggura.bay.livefilestore.com/y1mUJ3WgktvnXZYT8NJsOtaiyTwLqhrNdeNfeobgABMNhzuBXPXgbPuV6zeE3dtC3NEGthuUWMjaXd-KEx8C_xOTODfNeQEJffAyfRCdc5kV8CRhNmZ-MdCkbkGPoRXAjOe9qDvEz4qWhSBl1o8l0xrTQ/06_thumb[3].gif" width="413" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Assim que o Trace Listener estiver criado, devemos fazer alguns ajustes nas propriedades.&lt;br /&gt;Vamos ajustar as propriedades &amp;ldquo;Filename&amp;rdquo;, &amp;ldquo;Formatter&amp;rdquo; e &amp;ldquo;Name&amp;rdquo;, deixando-as igual a imagem abaixo:  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mw5ABlkml51cHltU_jBzgkrz7-J6NzUcDVq_neP4g_Wn2uaPBrwXIEqxe6tkQ7xRWAKCLxzE4RXrnDsKLdwz1P7zfDhBaTKFyAtp5FOtb7tqWilVOTGvLIDJfw23h7-zToHk-qljAP9FD0xFV8Zw3GA/07[4]%205B8C6A6F.gif" rel="WLPP"&gt;&lt;img title="07" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="201" alt="07" src="https://oggura.bay.livefilestore.com/y1m7gc1pqyt66Ts7wEoDtYxk2hLnFcz7p-ce3IeBhjncXn_erLZBLDYk5pe62wHyh7pb_FfZ-oSAUcQtaT_O6Zqk-zKwmvoXZ6TC_c7hSrYYAAt8VnI8U6z-8P3VhGhJP0a48lrgmfV5m1CpL--CNP0gQ/07_thumb[3]%202F51B295.gif" width="309" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Para finalizar as configura&amp;ccedil;&amp;otilde;es do log, temos que criar uma refer&amp;ecirc;ncia em categorias a esse &amp;ldquo;Trace Listener&amp;rdquo; que acabamos de criar. &lt;/p&gt;
&lt;p&gt;Clique com o bot&amp;atilde;o direito em &amp;ldquo;Category Sources&amp;rdquo; &amp;ndash;&amp;gt; &amp;ldquo;General&amp;rdquo; &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mhGc3ygD4Deo9HK8WZORWGC3STD6sOFw_Rm-mqPwsJvSAVAotc6QE2ZpVDr6jVZDhFMVWjx-EvRTXD_COqmL_wQCHOSgjUFLR21bfA4jF5hHWuyYrv57HdqqbpDDzzzRji-nt6rsT-YpUX61cqegdYw/09[3].gif" rel="WLPP"&gt;&lt;img title="09" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="109" alt="09" src="https://oggura.bay.livefilestore.com/y1ma0hL-7UgZSYSk8AA78pFdKBfnZmabtWJ96JvsIsxU8AfRj7EqaLtyVvmFRzjB_dK9ly0zFEK1TOBhErKMC7gMIPAkvm5sHsbu7X8RfxYUh9K17NO94nCFe47_NHXTPOfvVPGG75mPegIwA7jxHqFfA/09_thumb[1].gif" width="408" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Ap&amp;oacute;s a cria&amp;ccedil;&amp;atilde;o da refer&amp;ecirc;ncia, devemos atualizar a propriedade &amp;ldquo;ReferencedTraceListener&amp;rdquo; para &amp;ldquo;ArquivoFisico&amp;rdquo; (TraceListener criado no passo anterior). &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mNOES9o1nYLGZgyMDNdB38OZMLgfDa5Zvsaq4qcKO4zAlKoF9A_EwLkUNSzO3Uxo_-6Wy9cgSSl68aBHomtRXdwZ4HPETM3lY_xTib-NkMr3urH-tUlPosuT7QAPbtT_VXYYtpw-GuhKNCUhlbi5Opw/08[7].gif" rel="WLPP"&gt;&lt;img title="08" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="122" alt="08" src="https://oggura.bay.livefilestore.com/y1m7vLtz0nlxkFENDq0JCmEjgcnuZ8e8F5NOCQWlHU3gWb3EXnQpDD9pt4czOkyY6xDuuJoOAuq_dGngcqI1XO05-MoJEJaIhFnMLnHQBvR74iRM-eu7f3UJxiIoxl7phAKD8Dsqbxwq10Zc3YJuKp4ig/08_thumb[3]%201E87014B.gif" width="484" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Pronto, as configura&amp;ccedil;&amp;otilde;es do LOG est&amp;atilde;o criadas. Agora vamos us&amp;aacute;-las. &lt;/p&gt;
&lt;p&gt;Dentro do evento &amp;ldquo;Page_Load&amp;rdquo; vamos colocar o seguinte c&amp;oacute;digo:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    LOG.&lt;span style="color:#2b91af;"&gt;LogEntry &lt;/span&gt;logEntry = &lt;span style="color:blue;"&gt;new &lt;/span&gt;LOG.&lt;span style="color:#2b91af;"&gt;LogEntry&lt;/span&gt;();

    logEntry.Categories.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;General&amp;quot;&lt;/span&gt;);
    logEntry.Severity = &lt;span style="color:#2b91af;"&gt;TraceEventType&lt;/span&gt;.Information;
    logEntry.Title = &lt;span style="color:#a31515;"&gt;&amp;quot;T&amp;iacute;tulo Log Erro&amp;quot;&lt;/span&gt;;
    logEntry.Message = &lt;span style="color:#a31515;"&gt;&amp;quot;Mensagem de erro que queremos logar.&amp;quot;&lt;/span&gt;;

    LOG.&lt;span style="color:#2b91af;"&gt;Logger&lt;/span&gt;.Write(logEntry);
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O pr&amp;oacute;ximo passo &amp;eacute; executar a aplica&amp;ccedil;&amp;atilde;o. Assim que a p&amp;aacute;gina terminar sua execu&amp;ccedil;&amp;atilde;o, se voc&amp;ecirc; abrir o arquivo de log ( como configurado para o LOG - &amp;ldquo;C:\temp\trace.log&amp;rdquo;) devemos ter o seguinte resultado:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mbAcb6b7vnoAak9HkhRMOR-lARq8XxEW6cU3aSlgPU9PftXGX4r9AUcFQ1jg_oEi-uBmtHp40qJGLwlDwolT2cE5-HMGpkDhBzdVO_ayxiEB_65SNSLo-si6iYOIA9F9G32lIMGEvvUBl6e4wFLZemQ/10[3].gif" rel="WLPP"&gt;&lt;img title="10" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="303" alt="10" src="https://oggura.bay.livefilestore.com/y1mBU7yBC8LdP3RZDV5qPLYh51lcxX-NHLuuDmxJ-dwDPAq8J-Oser6xXB7qlD4v815NIt1ePwXg60GmC5boKMg6c-K_r_Yu59WS8YNAo7A08uAF9eAWBaYhZaidLrSVo6NF7BWvlEodZlXdPoh97v2kg/10_thumb[1].gif" width="504" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;At&amp;eacute; a pr&amp;oacute;xima pessoal.
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Refer&amp;ecirc;ncia&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd139916.aspx" target="_blank"&gt;[ MSDN &amp;ndash; Loggin Application Block ]&lt;/a&gt;
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Conclus&amp;atilde;o&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Com essa introdu&amp;ccedil;&amp;atilde;o, espero que a imagem de simplificar o log dos aplicativos tenha melhorado.&lt;br /&gt;Normalmente vemos o log como a fase 2 do projeto. Se essa parte do projeto for bem contru&amp;iacute;da,&lt;br /&gt;com certeza o log ser&amp;aacute; um show a parte do sistema.  &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=39" width="1" height="1"&gt;</description></item><item><title>Criptografando sessões da Web.config</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/criptografando-sess-245-es-da-web-config.aspx</link><pubDate>Tue, 02 Jun 2009 01:46:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:38</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=38</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/criptografando-sess-245-es-da-web-config.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, 
&lt;/p&gt;
&lt;p&gt;Infelizmente &amp;eacute; de conhecimentos de poucos que o arquivo web.config &amp;eacute; inacess&amp;iacute;vel. &lt;br /&gt;Quando digo inacess&amp;iacute;vel, quero dizer atrav&amp;eacute;s da url. 
&lt;/p&gt;
&lt;p&gt;Tente por curiosidade acessar o arquivo web.config de uma aplica&amp;ccedil;&amp;atilde;o .net. &lt;br /&gt;Voc&amp;ecirc;s ir&amp;atilde;o notar uma mesangem de erro parecida com a imagem abaixo. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mePxLJ0uv73VHmMEaB8iRjxo_nsb7ZqLQGJ7acB1rCWXHpN8Db-_RMN3kRSV1WlQXUYPKr4uX31te-HqShtT9gJnguu4d1Y2SSZAIWV_eocxteBiB4Tf_SCFXERoSuMre39gdbadSqfDvv-g4fCj-Rg/01[9].gif" rel="WLPP"&gt;&lt;img title="01" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="461" alt="01" src="https://oggura.bay.livefilestore.com/y1mvPCufQhobi4Vx5FS9mDst5JI_xGslcNj7rRIJcm5NU7RRK9iHKlREr9Hg9yMa2Llv1a6RT26F0waoaDepKu_gH-ItM4XX9_I2MegZrhgMxJSZn-3E3lYgrFa40UYZiu51xQ2fYrwAK-TgpYYRSdKoQ/01_thumb&lt;img src="http://buildbrasil.org/emoticons/emotion-14.gif" alt="Devil" /&gt;.gif" width="594" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Mas algumas vezes esse arquivo pode cair nas m&amp;atilde;os erradas. &lt;br /&gt;Imagine se as configura&amp;ccedil;&amp;otilde;es abaixo cair nas m&amp;atilde;os erradas? &lt;br /&gt;Pode ser incalcul&amp;aacute;vel o preju&amp;iacute;zo. &lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;PathXmlConfig&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;c:\config\&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ChaveCriptografia&lt;/span&gt;&amp;quot; &lt;br /&gt;         &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;fgnjkuit7435jksd76435437843hf78902435h&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ConexaoBanco&lt;/span&gt;&amp;quot; 
        &lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Data Souce=192.168.0.7;
        Initial Catalog=Vendas;
        User ID=sa;
        Password=sa;&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Essas s&amp;atilde;o informa&amp;ccedil;&amp;otilde;es que normalmente est&amp;atilde;o presentes no arquivo. &lt;br /&gt;Para dar mais seguran&amp;ccedil;a aos nossos aplicativos, vamos criptografar a sess&amp;atilde;o &amp;ldquo;ConnectionStrings&amp;rdquo;. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m707wNG9s7HZIwI8WyehklJASz_iUQgD2Pw8PygEYrn9qFpbKF3in9Ad7AJakD9od3DZaBkujx6XwUOeplN7mJou2M3WNRPRruYBYBy2MKBDtCxli-YMI1c1Iqk9tan6AqwCQzdvCppy0SZPKTjvMnA/02&lt;img src="http://buildbrasil.org/emoticons/emotion-29.gif" alt="Music" /&gt;.gif" rel="WLPP"&gt;&lt;img title="02" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="79" alt="02" src="https://oggura.bay.livefilestore.com/y1mPSsJoqVTGmkZH7aTgEfWQPx5xRzNrng3tR7KE73e7f_lemjJ4ijBUMURg3uJxJNiEXMUVzh4cWbYLXfm2VS8otD9FWLKuWS1K9Ro0KzavZ2X3m_JYJghm0xpljh1PCdzwGhSirbUtJ_LUMK6MMJV4w/02_thumb[5].gif" width="594" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Para criptografar a sess&amp;atilde;o vamos usar o comando &amp;ldquo;aspnet_regiis&amp;rdquo;. &lt;br /&gt;Para mais detalhes, visite a sess&amp;atilde;o &amp;ldquo;Refer&amp;ecirc;ncia&amp;rdquo; ao final deste artigo. 
&lt;/p&gt;
&lt;p&gt;O comando &amp;eacute; bem simples. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;aspnet_regiis.exe -pef [Sess&amp;atilde;o] [Pasta_Web_Config]&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m_QHgypuRuN3YDvIFFkAj0usLUwcz05hqmmkklrlw9auVcGrLxFq_130HNdGHxouoKmo39JLIyaHEqVkRGZLXLDdHKgfcJNL_C9xKGPgn-eIwC_26a88ZwW19aGq5LdpBY_EQYwbfAx9wfrLQElt2vg/03[7].gif" rel="WLPP"&gt;&lt;img title="03" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="300" alt="03" src="https://oggura.bay.livefilestore.com/y1mhBxykY1EoHhzZt-GVUccD-bUcOopyQr41urNZ_sdDVmsiTLGLxdSmTUWhYh0Pc_lY7QyjOBzL3s1BENJ32ySfsS_qN7NwdU-fORzeXPWltWFjeYUTIoXQ-GmTWG2ztVaR89s4JZFBxs7bmyQf0_dBQ/03_thumb[3].gif" width="594" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;O comando vai fazer com que a sess&amp;atilde;o &amp;ldquo;connectionStrings&amp;rdquo; fique assim:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;configProtectionProvider&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;RsaProtectedConfigurationProvider&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedData &lt;/span&gt;&lt;span style="color:red;"&gt;Type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#Element&lt;/span&gt;&amp;quot;
     &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptionMethod &lt;br /&gt;           &lt;/span&gt;&lt;span style="color:red;"&gt;Algorithm&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"&gt;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&lt;/a&gt;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2000/09/xmldsig#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedKey &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptionMethod &lt;br /&gt;                   &lt;/span&gt;&lt;span style="color:red;"&gt;Algorithm&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#rsa-1_5&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2000/09/xmldsig#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Rsa Key&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;                       &lt;/span&gt;CtnUf1Oeki4zi9VdhFooOxvU/eZ+&amp;hellip;&lt;br /&gt;                    &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedKey&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;                &lt;/span&gt;kzh5uaOfXEsrz/U3yp4gAMX1NfOdeqs+mnq0&amp;hellip;&lt;br /&gt;            &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eu minimizei o conte&amp;uacute;do da tag &amp;ldquo;CipherValue&amp;rdquo;, por que o conte&amp;uacute;do &amp;eacute; muito grande. 
&lt;/p&gt;
&lt;p&gt;Para fazer o caminho de volta, vamos usar o mesmo comando, s&amp;oacute; que com o par&amp;acirc;metro &lt;strong&gt;&amp;ldquo;pdf&amp;rdquo;&lt;/strong&gt; &lt;br /&gt;no lugar de &lt;strong&gt;&amp;ldquo;pef&amp;rdquo;&lt;/strong&gt;. O comando ficar&amp;aacute; assim: 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;aspnet_regiis.exe -pdf [Sess&amp;atilde;o] [Pasta_Web_Config]&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mBabXObgKlhkkUeBcMPBNuj22rgdBkJCMJ0roo5-ce8DmC7p8mpRbw5modtPt11tsustuegU-KHdTVdDf5uauwlcTLp6XgLmwaI4jpGo2Fcka9-6ON1b5j3K7E05XJ05bMhJR9oi62V1PSA-yJGtHmg/04[7].gif" rel="WLPP"&gt;&lt;img title="04" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="300" alt="04" src="https://oggura.bay.livefilestore.com/y1mKUfd50ftGZv43RBaTbUgnRfJw_HHQmokJyVVZhgoMoSYkPLd-k4Ey5XarvNIS4B4-m5Fx0H9Z4TfzZhtXiAI0bwUVZ-B1UhCPoV0F7RqCfIbmbpfNIHUQyGwA6YC24p9LX6xFlQHahPCFMFSLbFmYw/04_thumb[3].gif" width="594" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;E para demonstrar que esse comando funciona em qualquer sess&amp;atilde;o, vou us&amp;aacute;-lo na sess&amp;atilde;o appSettings. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mAF-WYafCWce7N4O3yl4Tm1NDVzGx_cxZ60LqpXHIZDFQNc2VpSfTAbl3AWxixFYec5QOOCm7EhVnrYpG2p4Q2SoX-0MHmTMBr0a9DngZYR8Dm6hVaVrmZn-OMuC_7rYM041ZqbS8o2l0dHKAfUJPyA/05[7].gif" rel="WLPP"&gt;&lt;img title="05" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="300" alt="05" src="https://oggura.bay.livefilestore.com/y1myuNJJl9SxboKRiKKWCAPZF50vx9yWnQbW0gSHlOeR_yTuR_mjFvUgQcYE2dHgKXG0AsGqlf8mIqFxwsxKjR-BAMQr-3Kexx3vmoV1cP1ashwdm8M88tgLYgI2lCsU2sRBg9lb-6SwXRqcOcq0-9pUg/05_thumb[3].gif" width="594" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;O resultado ser&amp;aacute; o seguinte:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings &lt;/span&gt;&lt;span style="color:red;"&gt;configProtectionProvider&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;RsaProtectedConfigurationProvider&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedData &lt;/span&gt;&lt;span style="color:red;"&gt;Type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#Element&lt;/span&gt;&amp;quot;
     &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptionMethod &lt;br /&gt;            &lt;/span&gt;&lt;span style="color:red;"&gt;Algorithm&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2000/09/xmldsig#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedKey &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptionMethod &lt;br /&gt;                    &lt;/span&gt;&lt;span style="color:red;"&gt;Algorithm&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/04/xmlenc#rsa-1_5&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2000/09/xmldsig#&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Rsa Key&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;X4kpfxvqnVB4ET479PjsBT/Vk58xXL8&amp;hellip;&lt;br /&gt;                    &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedKey&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;KeyInfo&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Fi5Z2wsBL6iaWNOePuK1cIoQocmZKN9AM8Mdba&amp;hellip;&lt;br /&gt;            &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherValue&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CipherData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;EncryptedData&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;O c&amp;oacute;digo abaixo mostra aos c&amp;eacute;ticos que mesmo criptografada a chave pode ser lida normalmente. &lt;br /&gt;N&amp;atilde;o necessitando que o desenvolvedor descriptografe a sess&amp;atilde;o appSettings antes de ler. &lt;br /&gt;O visual studio &amp;eacute; respons&amp;aacute;vel por fazer isso.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    Response.Write(&lt;span style="color:#a31515;"&gt;&amp;quot;Valor da chave &amp;lt;b&amp;gt;PathXmlConfig&amp;lt;/b&amp;gt;:&amp;amp;nbsp;&amp;quot;&lt;/span&gt;);
    Response.Write(&lt;span style="color:#2b91af;"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color:#a31515;"&gt;&amp;quot;PathXmlConfig&amp;quot;&lt;/span&gt;]);
    Response.Write(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;/span&gt;);
    Response.Write(&lt;span style="color:#a31515;"&gt;&amp;quot;Valor da chave &amp;lt;b&amp;gt;ChaveCriptografia&amp;lt;/b&amp;gt;:&amp;amp;nbsp;&amp;quot;&lt;/span&gt;);
    Response.Write(&lt;span style="color:#2b91af;"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color:#a31515;"&gt;&amp;quot;ChaveCriptografia&amp;quot;&lt;/span&gt;]);
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podemos notar que o c&amp;oacute;digo tem a &amp;uacute;nica e exclusica fun&amp;ccedil;&amp;atilde;o de mostrar o conte&amp;uacute;do das chaves, &lt;br /&gt;e n&amp;atilde;o descriptografar. Esse c&amp;oacute;digo resulta na tela abaixo. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mBtSi9WzBJ0wBE1su_pgnoPuyrjjoY_P-uIexzI-oVJHUPd4HYeX4y8FP9iwhAhDnuefSFpQT6bjMoToNiG-6SwhIkbMam_XA-0M4sDmjzq7urdkFHqud0slUpQuMnlCc9AhW7E9hcegOGqBh3k21kQ/06&lt;img src="http://buildbrasil.org/emoticons/emotion-29.gif" alt="Music" /&gt;.gif" rel="WLPP"&gt;&lt;img title="06" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="203" alt="06" src="https://oggura.bay.livefilestore.com/y1meP3v_EOLY_pT3pfC-8--8XsFdeeViWjskckqM7XrEPAAByeS-GW0jLFwgYgQ-7Gdo8fZae6fLrRA0M1_PBHTrvlh2w1dBQOn3UPUclqV6rm7TjJUGYqc2aI0ERaSriI6SyBvolDbbeDwBtvzQmaSLw/06_thumb[4].gif" width="594" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;At&amp;eacute; a pr&amp;oacute;xima pessoal. 
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Conclus&amp;atilde;o&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Podemos concluir que podemos criptografar qualquer sess&amp;atilde;o do web.config&lt;br /&gt;com o comando aspnet_regiis. Mas tome muito cuidado. Use consciente o comando, por que quanto&lt;br /&gt;mais complexa for a criptografia, mais lenta ser&amp;aacute; a leitura das chaves. 
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Refer&amp;ecirc;ncia&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/pt-br/library/k6h9cz8h.aspx" target="_blank"&gt;MSDN - Comando aspnet_regiis&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx" target="_blank"&gt;MSDN - Encrypting and Decrypting Configuration Sections&lt;/a&gt; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=38" width="1" height="1"&gt;</description></item><item><title>Formatando data com o comando DateTime.toString</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/formatando-data-com-o-comando-datetime-tostring.aspx</link><pubDate>Tue, 02 Jun 2009 01:44:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:36</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=36</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/formatando-data-com-o-comando-datetime-tostring.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Nesse artigo vou demontrar como escrever uma vari&amp;aacute;vel do tipo DataTime de diversas formas: &lt;br /&gt;abreviada, por extenso, s&amp;oacute; o dia, depois s&amp;oacute; o m&amp;ecirc;s e por a&amp;iacute; vai. Pra quem n&amp;atilde;o sabe, eu comecei a programar no VB. E l&amp;aacute; tem uma fun&amp;ccedil;&amp;atilde;o chamada Format que se encarrega de fazer isso. Ela era usada assim:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;MsgBox&lt;/span&gt;( &lt;span style="color:#0000ff;"&gt;Format&lt;/span&gt;( Now(), &lt;span style="color:#a31515;"&gt;&amp;quot;dddd, yyyy mmmm dd&amp;quot;&lt;/span&gt;))&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O retorno dessa fun&amp;ccedil;&amp;atilde;o era uma caixa de mensagem com a mensagem &amp;ldquo;Quarta-Feira, 2009 Mar&amp;ccedil;o 11&amp;rdquo;. S&amp;oacute; que essa fun&amp;ccedil;&amp;atilde;o n&amp;atilde;o existe no C#. Para resolver isso, usamos o m&amp;eacute;todo &lt;strong&gt;.toString()&lt;/strong&gt; das vari&amp;aacute;veis do tipo DateTime. Aqui vai um exemplo do equivalente em C# do exemplo em VB:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now.ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;dddd, yyyy MMMM dd&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;p&gt;Apenas uma &amp;ldquo;grande&amp;rdquo; mudan&amp;ccedil;a entre as duas vers&amp;otilde;es, a representa&amp;ccedil;&amp;atilde;o do m&amp;ecirc;s. Agora ele &amp;eacute; representado pela letra &amp;ldquo;M&amp;rdquo; mai&amp;uacute;scula. &lt;br /&gt;Existe dois tipos de formata&amp;ccedil;&amp;atilde;o que podemos utilizar: padronizada ou custimizada. &lt;br /&gt;A formata&amp;ccedil;&amp;atilde;o padronizada consiste em uma formata&amp;ccedil;&amp;atilde;o de data e hora j&amp;aacute; pronta. &lt;br /&gt;O c&amp;oacute;digo abaixo mostra o resultado da utiliza&amp;ccedil;&amp;atilde;o de todas as formata&amp;ccedil;&amp;otilde;es padronizadas. &lt;br /&gt;Para detalhes dos padr&amp;otilde;es, confira a area Refer&amp;ecirc;ncia no final deste artigo.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {

    &lt;span style="color:#2b91af;"&gt;DateTime &lt;/span&gt;data = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now;

    &lt;span style="color:green;"&gt;// ARRAY COM TODOS AS FORMATA&amp;Ccedil;&amp;Otilde;ES PADRONIZADAS
    &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] padroes = { &lt;span style="color:#a31515;"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;f&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;F&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;g&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;G&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;m&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;o&amp;quot;&lt;/span&gt;,
                           &lt;span style="color:#a31515;"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;t&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;T&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;u&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;U&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;y&amp;quot; &lt;/span&gt;};

    &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; padroes.Length; i++) {
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Padr&amp;atilde;o \&amp;quot;{0}\&amp;quot;, resulta em \&amp;quot;{1}\&amp;quot;&amp;quot;&lt;/span&gt;,
        padroes&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;,
        data.ToString(padroes&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;));
    }

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mN0Ev3reE2RLIJwgHJ9_741aMY3jFQDggH5mcMTBGMvPaBkU4UoNkSUabCEEd7EmeoJJoDEW_mefaZVxLRKm_a6j88bH8GRPg_dBaOUFIG-t17ZKHvIvPQHg4mq8WwKthsvM1mVGLv4w/01[3].gif" rel="WLPP"&gt;&lt;img title="01" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="224" alt="01" src="https://oggura.bay.livefilestore.com/y1mGialXzrbxGQa-wqSaqXOoaABwPmR0YSgAizQY0SLngg84SU-WtFaHoIVIXvYceQvW4mnp1v_mxpBZ4Om_HAnP-NCLfVg_c0eUw0nPoS2htBbjIsm7ls7dS0I034VhUQTdj9vWjkf35k/01_thumb[1].gif" width="577" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;A formata&amp;ccedil;&amp;atilde;o customizada, &amp;eacute; o usu&amp;aacute;rio que determina quais informa&amp;ccedil;&amp;otilde;es dever&amp;atilde;o aparecer. &lt;br /&gt;O c&amp;oacute;digo abaixo mostra a utiliza&amp;ccedil;&amp;atilde;o de formata&amp;ccedil;&amp;otilde;es customizadas sebdi usadas separadamente. &lt;br /&gt;Para detalhes dos padr&amp;otilde;es, confira a area Refer&amp;ecirc;ncia no final deste artigo.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {

    &lt;span style="color:#2b91af;"&gt;DateTime &lt;/span&gt;data = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now;

    &lt;span style="color:green;"&gt;// ARRAY COM TODOS AS FORMATA&amp;Ccedil;&amp;Otilde;ES PADRONIZADAS
    &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] padroes = { &lt;span style="color:#a31515;"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;dd&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;ddd&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;dddd&amp;quot;&lt;/span&gt;, 
                           &lt;span style="color:#a31515;"&gt;&amp;quot;M&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;MM&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;MMM&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;MMMM&amp;quot;&lt;/span&gt;, 
                           &lt;span style="color:#a31515;"&gt;&amp;quot;y&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;yy&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;yyy&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;yyyy&amp;quot;&lt;/span&gt;,
                           &lt;span style="color:#a31515;"&gt;&amp;quot;HH&amp;quot;&lt;/span&gt;,&lt;span style="color:#a31515;"&gt;&amp;quot;HHH&amp;quot;&lt;/span&gt;,&lt;span style="color:#a31515;"&gt;&amp;quot;HHHH&amp;quot;&lt;/span&gt;,
                           &lt;span style="color:#a31515;"&gt;&amp;quot;mm&amp;quot;
                       &lt;/span&gt;};

    &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; padroes.Length; i++) {
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Padr&amp;atilde;o \&amp;quot;{0}\&amp;quot;, resulta em \&amp;quot;{1}\&amp;quot;&amp;quot;&lt;/span&gt;,
        padroes&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;,
        data.ToString(padroes&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;));
    }

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esse c&amp;oacute;digo vai mostrar os seguintes resultados:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mNHZD3WzTPps1_XwTmiErE2Q3uka6RSn_x8-PzBKpQh6MEj0CKtjwNHabCLy6fwGPH2-rjHEs4KEwXgsQaQ7A9oMpxymz7LYbBJXuIj_nG-WZx93ccOKVoTcbSmcg8YDYIWFNqGK7qQw/02[3].gif" rel="WLPP"&gt;&lt;img title="02" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="238" alt="02" src="https://oggura.bay.livefilestore.com/y1mT4BQ1NB9AYWv2lITrYiBgJr2xaDk2BEvhAIx0r4STte0bPat4aVNcIykkLvzWHWuH1trI42pAVzYAm1Ky5B7gWpMKlhnUpI-Dt63gCoU1bUMxtd0a7CV-FV7bIC6DlWtTvgTdomscaI/02_thumb[1].gif" width="333" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Bom, eu mostrei como utilizar as formata&amp;ccedil;&amp;otilde;es padronizadas e as suas customiza&amp;ccedil;&amp;otilde;es. A formata&amp;ccedil;&amp;atilde;o &amp;eacute; realizada  baseada na cultura em que ela &amp;eacute; executada. Por exemplo, o resultado acima na cultura en-US, ficaria assim:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m-fOV56zUbH7yEPCa3Qf95t8ahwkyv2qsznZ_f7m4Jz9d1xkpLkpr1AFTTy4lm9wW0lMPn_Dr1vMHCtv79eqOjYJ-e3lQdZWwbS00uZxoCklQFXz0aoTnYgOjpi5SMssIdbF65kpx-RE/03[3].gif" rel="WLPP"&gt;&lt;img title="03" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="249" alt="03" src="https://oggura.bay.livefilestore.com/y1mFLq_x08VaC8R2Z5FEB9zWoaiAqMm0l9G1TyW7W3c0bQu9HYhW_8gUD6ejBlqjko8Mry0d0sHRlyr3q-VMzy96TJfWHscG81WyeNyk_eJdvmUMFQKxr87YQt22D7PXdCrSrNDQYUmsbc/03_thumb[1].gif" width="318" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Pra finalizar vou mostrar outra forma de formatar a data usando quatro m&amp;eacute;todos de vari&amp;aacute;veis DateTime.
&lt;/p&gt;
&lt;p&gt;- ToShortDateString() &lt;br /&gt;- ToShortTimeString() &lt;br /&gt;- ToLongDateString() &lt;br /&gt;- ToLongTimeString()
&lt;/p&gt;
&lt;p&gt;O c&amp;oacute;digo abaixo demonstra a utiliza&amp;ccedil;&amp;atilde;o deles.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {

    &lt;span style="color:#2b91af;"&gt;DateTime &lt;/span&gt;data = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now;

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Comando: data.ToShortDateString(); Retorna: {0}&amp;quot;&lt;/span&gt;,&lt;br /&gt;                      data.ToShortDateString());
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Comando: data.ToShortTimeString(); Retorna: {0}&amp;quot;&lt;/span&gt;, &lt;br /&gt;                      data.ToShortTimeString());
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Comando: data.ToLongDateString(); Retorna: {0}&amp;quot;&lt;/span&gt;, }&lt;br /&gt;                      data.ToLongDateString());
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Comando: data.ToLongTimeString(); Retorna: {0}&amp;quot;&lt;/span&gt;,&lt;br /&gt;                      data.ToLongTimeString());

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m1pT03czcLumDUfGmiGZLFh0Xb2X4Flx3dNkgSVwCYKMM85ZkgehoRflcszDEqOetxbpn21s2WU9TS1kIUzd3vUggh-SUI813BCz_E6PiQ_M10NVoeL1ykwgrjbiTn6UzsLl2Dx__GyY/04[3]%20614CB749.gif" rel="WLPP"&gt;&lt;img title="04" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="88" alt="04" src="https://oggura.bay.livefilestore.com/y1mIQNQz6_hyk_79jwUGoUCybVYgpfe1LemxdGIgMovCdJ25-or2n3lqhhRcXqwC9Yly08hnRMJbwNhpKHfCSOfZ3l6iobnh-1K-yuFozflfAJCPGnxlP30yu1gm-eDHoOppYjxi2otS_A/04_thumb[1]%2063D52760.gif" width="540" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h3&gt;Conclus&amp;atilde;o&lt;/h3&gt;
&lt;p&gt;Bom, espero que tenha demonstrado as diversas forma de escrevar uma data com mais clareza poss&amp;iacute;vel.&lt;br /&gt;Para saber mais detalhes, n&amp;atilde;o esque&amp;ccedil;am de visitar os link&amp;rsquo;s que est&amp;atilde;o em Refer&amp;ecirc;ncia.
&lt;/p&gt;
&lt;h3&gt;Refer&amp;ecirc;ncia&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/pt-br/library/az4se3k1.aspx"&gt;MSDN - Standard Date and Time Format Strings&lt;/a&gt; &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/pt-br/library/8kb3ddd4.aspx"&gt;MSDN - Custom Date and Time Format Strings&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=36" width="1" height="1"&gt;</description></item><item><title>Criptografando dados com Enterprise Library</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/criptografando-dados-com-enterprise-library.aspx</link><pubDate>Tue, 02 Jun 2009 01:44:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:37</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=37</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/criptografando-dados-com-enterprise-library.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Hoje vou comentar sobre um assunto muito importante: A criptografia.&lt;br /&gt;Muitos desenvolvedores ainda confundem a criptografia com hash. A principal diferen&amp;ccedil;a &amp;eacute; que no hash n&amp;atilde;o h&amp;aacute; o caminho de volta, ou seja, depois de criptografado, n&amp;atilde;o podemos descriptografar. &lt;/p&gt;
&lt;p&gt;Para demonstrar como fazer criptografia de dados, n&amp;atilde;o vou criar algoritmos altamente complexos e extensos.&lt;br /&gt;Vou usar bibliotecas j&amp;aacute; prontas que a Microsoft disponibiliza para n&amp;oacute;s desenvolvedores. Essas bibliotecas s&amp;atilde;o conhecidas como Enterprise Library. A &amp;uacute;ltima vers&amp;atilde;o at&amp;eacute; a presente data &amp;eacute; a 4.1. Para detalhes de como fazer o download da biblioteca, visite a sess&amp;atilde;o &amp;ldquo;Refer&amp;ecirc;ncias&amp;rdquo; ao final deste artigo. Dentro deste pacote de bibliotecas, h&amp;aacute; uma que &amp;eacute; respons&amp;aacute;vel em criptografar, o nome dela &amp;eacute; a &amp;ldquo;Criptografy&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;Ent&amp;atilde;o vamos ao c&amp;oacute;digo: &lt;/p&gt;
&lt;p&gt;Depois que a Enterprise Library estiver instalada, devemos criar um projeto do tipo Web Application.&lt;br /&gt;Com o projeto criado, clicamos com o bot&amp;atilde;o direito em cima do arquivo &amp;ldquo;Web.config&amp;rdquo; e selecionar a op&amp;ccedil;&amp;atilde;o&lt;br /&gt;&amp;rdquo;Edit Enterprise Library Configuration&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mtNZ4Xr-RldKKtGC5S7EJzJfep9L4WsaK8eymmsyvFvvql_OvupnBsbvuwU9WpnZuKcJpt_WLOSRpV7xUl2cU3TKv8fQ9GBqwoN_C5eE4mC6z-LT4uD2byo1MmbZFmZ6s_kzuVGgQiDo9fW1UfTXOTA/01[2].gif" rel="WLPP"&gt;&lt;img title="01" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="244" alt="01" src="https://oggura.bay.livefilestore.com/y1mH-0OkbcFap5AfB3LeoOV1TFvSH-NEkKf8bii01wtIOFLtVdXRxrAYQI60_uq54ppGYa6zaI6nnQbYBIv8Hvd0PQTO6feIZL9tFo2wYabPKD3Jy-hDJZcV8lMDj4xf0mAtHRPlqk4UKgCprY4ktqnmg/01_thumb[1]%2027AF7FB4.gif" width="249" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Essa a&amp;ccedil;&amp;atilde;o ir&amp;aacute; fazer com que a tela de configura&amp;ccedil;&amp;atilde;o apare&amp;ccedil;a. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mQ6TtavdpObNBWBQejScDsGGNw4Dhoh1KtvGEd-_4p3QamDNMtgsBy6XbRVrNpFXTi7iKhKhoC1P7cR53NF85bgxlbDRHQkUY_H5TiCLL3zxDQ0SlnrYSygU8TxAPiLA01otJY2swvPwl-JSlRVDEcw/02[2].gif" rel="WLPP"&gt;&lt;img title="02" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="161" alt="02" src="https://oggura.bay.livefilestore.com/y1mDe6XJ9Zc2krN5oCFEzRtKh6TmViJdd1cBXSCBuJJ1CSFp3tIVTRDyiMaCQ6dd4TFzTA1c5LDnHT9NSQTcUDqNXXvAF1g4k_589wty3TNONlfEfeuBP0AY0H9NXVg24d4JGnuXqnavdCrD8p4l-W5QQ/02_thumb[1]%205634A122.gif" width="283" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;A tela &amp;eacute; bem direta e simples. Nessa tela podemos configurar qualquer objeto, quando se trata de Enterprise Library. &lt;/p&gt;
&lt;p&gt;O passo seguinte ser&amp;aacute; criar o bloco de configura&amp;ccedil;&amp;atilde;o para criptografia. Para criar esse bloco, devemos clicar com o bot&amp;atilde;o direito&lt;br /&gt;do mouse em cima da pasta de configura&amp;ccedil;&amp;atilde;o, em seguida em &amp;ldquo;New&amp;rdquo; e depois em &amp;ldquo;Criptography Application Block&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mBrAltJMcJMHcDzjxnEvYo8flAFaZVJTQxsFAyYh6WV4dt5rxs9qtO2WZ0dfbwJB9W0xT9eKVx8DGYMyiQbda9hyMdT5vihTkKJN-yQ4yMb3RETss-72GvVG9NBSaYkZu5chcHiytDbQ_GM27gQlZKg/03[2].gif" rel="WLPP"&gt;&lt;img title="03" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="253" alt="03" src="https://oggura.bay.livefilestore.com/y1mga51q_jc8RsGLgx6Z6vS0pyKKhT7azYp2xV52DvFO6xmOqXEZi27CwhRXIvrnxKOtO-FEmyO5y9W5wtc83FfL9wp0EZeWWWZpbGhKSjFJqguT3pvCfviUqHN4POXmVdI7TqRhu0oIKUMMjeRMBSYEg/03_thumb[1]%205E1057A5.gif" width="520" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Feito isso, o bloco de criptografia ser&amp;aacute; criado com dois tipo de provedores: &amp;ldquo;Hash&amp;rdquo; e &amp;ldquo;Symmetric&amp;rdquo;.&lt;br /&gt;Como o pr&amp;oacute;prio nome j&amp;aacute; diz, o primeiro &amp;eacute; para criptografia hash (onde n&amp;atilde;o h&amp;aacute; o caminho de volta) e criptografia sim&amp;eacute;trica. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1miPDtgx5sNeGpMz6E2XTzj920zscLluTEj2438hGRQ3zssm6eutAK1Qhml_TO6-c77crEoUZjnZSHfdh4Sy-3nOdTHKBLybR_iq5Kyy4pUNtekA0ztgaqTvFy2F9NsHsM7c2O4zMm1M5NalLEQTpf5Q/04[2].gif" rel="WLPP"&gt;&lt;img title="04" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="213" alt="04" src="https://oggura.bay.livefilestore.com/y1m8BzlV6cvInzxa_T15Zc3yL9gQe3ZsfSMwP8CrmOA__XsBki7DH1_3ZzxPDin_JIXBRagnA6boFhZ2uuJqRgtBzDZl5bRRDACA6C1JOR_ltfitii5_MuM5Ua12OXbfgLR3_sLH7XKmOF6bxYfeGCapg/04_thumb[1]%2020B1264E.gif" width="259" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Como o nosso exemplo &amp;eacute; para criptografia simetrica, vamos criar um provedor para a mesma. Para isso,&lt;br /&gt;novamente devemos clicar com o bot&amp;atilde;o direto do mouse em cima de &amp;ldquo;Simmetric Providers&amp;rdquo;, em &amp;ldquo;New&amp;rdquo; e &amp;ldquo;Simmetric Algorithm Provider&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mpv1Z86zAwSziEBSPwBF0Qjxxd9woUyC8QWRuonXR78pUr48GII23v01sZys-caDWzNowLREsdkzo-tBDGCKolGR5pSaJdBrOHKjsju98sRJD51qOuBeFviE7PdJTjLBnj7D69w4Wp2ji_rNz-DJ-9g/05[2].gif" rel="WLPP"&gt;&lt;img title="05" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="133" alt="05" src="https://oggura.bay.livefilestore.com/y1mhFDXm8BnI6eBzYXXkHZy0KT2GjBdZwOWW17FqSFQKkv1G556_-lN2Y03yNztxWc93lTb0kngDAWbdFFNFzaDYy6vzKTYChK0MXky82elKZrjzbSIksaqBm7obJDsnXszDoiXa8NTWuW8oqz15tPuJQ/05_thumb[1]%203FB8574F.gif" width="510" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Logo em seguida uma janela solicitando o provedore de criptografia ser&amp;aacute; aberto. H&amp;aacute; v&amp;aacute;rios provedores j&amp;aacute; prontos.&lt;br /&gt;Voc&amp;ecirc; pode escolher o que melhor cabe na sua aplica&amp;ccedil;&amp;atilde;o. No nosso exemplo vou usar a biblioteca &amp;ldquo;RijindaeManaged&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m_ezdWdFLy_2mExis0fbeC27UlF09OFvijpVu_9j3fgS2SWSQXZKdySe9JYYFSx6nsvI-s76VIVJZcWKo0L6fElxJEjqxWXSU6n2rxILgrhwWP014r-SSJSIyyvzrcJAiSNBqVchBY2Oxo9CLlR07yA/06[2].gif" rel="WLPP"&gt;&lt;img title="06" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="423" alt="06" src="https://oggura.bay.livefilestore.com/y1m8TzAMPGcf9DW0Yu09T8tk4jAx2n83edZJcUa-OgriAGElkNUtDHErKBhdW8VpdKrFhd5QJ2bXQPOXKBrQmTB1OD6Z2_Aqv3a2hYERZQM1DohhAtflGnaaGgopvBswYdzhfDGRjHGPaNTC2LAex9FWA/06_thumb[1]%202924AB87.gif" width="531" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;
&lt;p&gt;O pr&amp;oacute;ximo passo ser&amp;aacute; a escolha da chave de criptografia. Onde voc&amp;ecirc; poder&amp;aacute; criar uma, usar uma j&amp;aacute; existente, ou importar uma chave protegida com senha. Vamos criar uma nova. Para isso escolhemos a primeira op&amp;ccedil;&amp;atilde;o &amp;ldquo;Create a new key&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mHTqG3LKivRpSbBQep9c1xRvF9dqLOdd_onWWyiQekDJqhaKsMzGsswV-GjG0cXmdTc9z5MkNVIr6mxrQgMSYz2LruKBE0tbU51T1TXymvbufvYvZigYSVDpisOom-GSaDdU-4pbzhz_2GCuCOlqwZw/07[4].gif"&gt;&lt;img title="07" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="249" alt="07" src="https://oggura.bay.livefilestore.com/y1muAlobViQrZNGNwUw8MCbLatBrmbpRo7304YvS07YKQuGvXqAPRSTSBH6ULTXWvgBdntpT4rwlmfikeTeHLkmsVzymE1cj4tGchF8gHxS6Qp_JQaR3q1_UumZOXAVssXpgviNjvdvCwqeb9yKSIx8Kw/07_thumb[3].gif" width="380" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Como vamos criar uma nova chave, devemos informar qual &amp;eacute; a chave. Podemos criar a chave de duas formas, digitar uma nossa ou fazer com que o visual studio crie uma. No nosso caso, vamos gerar uma automaticamente. Ent&amp;atilde;o assim que a pr&amp;oacute;xima tela se abrir, clique em &amp;ldquo;Generate&amp;rdquo; para criar um string com letras e n&amp;uacute;meros aleat&amp;oacute;rios, que ir&amp;atilde;o se tornar a nossa chave. Escolhida a chave, clique em &amp;ldquo;Next&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mPeJlmDXhh5fnXD54b1VLfKwzDHLvWMDeUu4ze3JRoqMGKa0jp4dzsWBaEIKLFb3VG_Av81KvOohCTB5y4NJlgJIvEuOi8i7F4BPb_R99a34C65sNTrhbkyH0tAZB2UQwXYNE9cpI4GGVEZkfYLUvXA/08[4].gif" rel="WLPP"&gt;&lt;img title="08" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="249" alt="08" src="https://oggura.bay.livefilestore.com/y1mqgnb3O5didNDTvlVULnEnr0VSNBiQwJ-aw5_U9OaB2EQvyIS11c0g7mG6q535plh38t4uRAxv6ghZUH7ipC6LTnDNXYRECOZcHLykYpp0XRUYJQsOpu8xugZ_TQCNZJdolBwuSI2Hy31lVOJFtsryQ/08_thumb[3].gif" width="380" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;A Enterprise Library precisa de um arquivo fisico para trabalhar. Surge ent&amp;atilde;o a necessidade de que seja salvo um arquivo com essas informa&amp;ccedil;&amp;otilde;es, o que nos leva ao pr&amp;oacute;ximo passo. Escolha um local onde ir&amp;aacute; ficar o arquivo. De prefer&amp;ecirc;ncia escolha uma pasta dentro do pr&amp;oacute;prio projeto. Assim que terminar de escolher o local do arquivo, clique em &amp;ldquo;Next&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mwYekWTgoPecKau-wshTk4EB5Awvy96qkCXa4qSYZLTnyRPmVt88w_wwCmlyRvuBq42f-VaueOYaxMKlD_YRmoY28gepL1S2Acx_AmcMY4LnczRU0cGbWpKM_JtKXCA4aH6LhNw0RTH9rvhYDInxILA/09[4].gif" rel="WLPP"&gt;&lt;img title="09" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="249" alt="09" src="https://oggura.bay.livefilestore.com/y1mRg8gi8b-g2sY1N_dAqHVrqyrzFUC3NH6jhkgiWFT3407MKHAskQ0cejMS_MtHLRdjhaiB0Gm5tEyRIZLN_nsbAjKR-Vxao-au0SatKyprQ1bcZna5GpgiycsJLf6caT0S6hiUwAzE5dPmNt2zc79Kg/09_thumb[3].gif" width="380" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;O quinto e &amp;uacute;ltimo passo da configura&amp;ccedil;&amp;atilde;o precisa de uma prote&amp;ccedil;&amp;atilde;o. O que seria de um arquivo respons&amp;aacute;vel pela criptografia, se n&amp;atilde;o fosse protegido n&amp;atilde;o &amp;eacute; mesmo? Temos duas formas de fazer essa prote&amp;ccedil;&amp;atilde;o: &lt;/p&gt;
&lt;p&gt;- &lt;em&gt;User mode&lt;/em&gt;: somente as aplica&amp;ccedil;&amp;otilde;es rodando com o usu&amp;aacute;rio logado ter&amp;aacute; acesso &amp;agrave; chave para criptografar e descriptografar uma informa&amp;ccedil;&amp;atilde;o.&lt;br /&gt;- &lt;em&gt;Machine mode&lt;/em&gt;: qualquer aplica&amp;ccedil;&amp;atilde;o rodando na m&amp;aacute;quina (e somente naquela m&amp;aacute;quina) ter&amp;aacute; acesso &amp;agrave; chave.  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m-QNSU2oE2LHsK57CcX8oNDPIs7Hkyme_ROQ0MIG9GbsLASph-gzGcoTzZHmA3QcRCB_lwGyH0Gt3UOgfHOmZdgXxVr41hi8RBwC0IX2yVUxQosEBpKMZcomYblde4Blk-NdmcG2VKXd5iYNz7Q5kjw/10[4].gif" rel="WLPP"&gt;&lt;img title="10" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="249" alt="10" src="https://oggura.bay.livefilestore.com/y1mbgtwD-nvqX788C7Cq-kWe8inO4BtIO0tCuL9qk4wlDpb0tucLKFTbxHidBzrli6Y-mDoxK1vN2YVHCVizAGvyq1yuVtgqjJpWAf-D3E8DfjqXlhqtB73EP0xoLN1T5NVByLIc2M0TMMVkGs_0a6PQw/10_thumb[3].gif" width="380" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Depois de escolher a prote&amp;ccedil;&amp;atilde;o do arquivo, clique em &amp;ldquo;Finish&amp;rdquo;. Assim terminamos a configura&amp;ccedil;&amp;atilde;o da bliblioteca para usarmos a criptografia. Agora vamos proteger nossos dados! &lt;/p&gt;
&lt;p&gt;Nesse exemplo eu fiz um tela bem simples, onde vamos digitar um texto e clicar para criptografar. O html da p&amp;aacute;gina exemplo &amp;eacute; o seguinte:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;form &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;form1&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;float&lt;/span&gt;: &lt;span style="color:blue;"&gt;left&lt;/span&gt;;&lt;span style="color:blue;"&gt;&amp;quot;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;clear&lt;/span&gt;: &lt;span style="color:blue;"&gt;left&lt;/span&gt;; &lt;span style="color:red;"&gt;float&lt;/span&gt;: &lt;span style="color:blue;"&gt;left&lt;/span&gt;;&lt;span style="color:blue;"&gt;&amp;quot;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;TextBox1&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;200px&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button1&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Criptografar&amp;quot;&lt;br /&gt;              &lt;/span&gt;&lt;span style="color:red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button1_Click&amp;quot; /&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;clear&lt;/span&gt;: &lt;span style="color:blue;"&gt;left&lt;/span&gt;; &lt;span style="color:red;"&gt;float&lt;/span&gt;: &lt;span style="color:blue;"&gt;left&lt;/span&gt;;&lt;span style="color:blue;"&gt;&amp;quot;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Label &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Label1&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Label&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;form&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agora vamos programar a criptografia. Mas antes devemos adicionar duas bibliotecas que far&amp;atilde;o o processo:&lt;br /&gt;- Microsoft.Practices.EnterpriseLibrary.Common e&lt;br /&gt;- Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.&lt;br /&gt;Ambas v&amp;atilde;o estar na pasta &amp;ldquo;C:\Arquivos de programas\Microsoft Enterprise Library 4.1 - October 2008\Bin\&amp;rdquo; (pasta padr&amp;atilde;o de instala&amp;ccedil;&amp;atilde;o da Enterprise Library). Agora podemos continuar com o c&amp;oacute;digo.
&lt;/p&gt;
&lt;p&gt;No evento click do bot&amp;atilde;o, vamos colocar o c&amp;oacute;digo:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Button1_Click(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    Label1.Text = &lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(
        &lt;span style="color:#a31515;"&gt;&amp;quot;A string do TextBox criptografada ficar&amp;aacute; assim: &amp;lt;br /&amp;gt;{0}&amp;quot;&lt;/span&gt;,
        Cripto.&lt;span style="color:#2b91af;"&gt;Cryptographer&lt;/span&gt;.EncryptSymmetric(&lt;span style="color:#a31515;"&gt;&amp;quot;RijndaelManaged&amp;quot;&lt;/span&gt;, TextBox1.Text));
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agora vem a parte mais dif&amp;iacute;cil, testar a aplica&amp;ccedil;&amp;atilde;o. O resultado dever&amp;aacute; ser parecido com a figura abaixo.
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1m0tyy3hjPmOqZNzaYBULGpOJLT1OnG2gQJQcGJQgAcYceaLnFrIJRbPFcN2I0Ewiy-8H85_GUcGOCcQ9vq8wNHBvgt21VqCtnbrVIf8d-QaIgpTo7pUCc6U9EKLNMYQGuA9fpnwtAeeOmDqZfoAC6BQ/11[4].gif" rel="WLPP"&gt;&lt;img title="11" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="212" alt="11" src="https://oggura.bay.livefilestore.com/y1mThI57_uPpCiNzckMZY4bKQvFO0kog8uW4j5uoyNLz5_B4_f6E5Cz_S3h-BUh9hbiu8-Rhm3UbyoNPynYUVujom5jfhKL8yCYSonOdC4w2zRF4717TE-QzhH2yTODAuNXo4KrNosCyjvQUaWSrahLmA/11_thumb[3].gif" width="749" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Pronto! Agora podemos proteger os dados. Pra finalizar com chave de ouro, vamos fazer o caminho inverso.&lt;br /&gt;Devemos ent&amp;atilde;o trocar o c&amp;oacute;digo do click do bot&amp;atilde;o.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Button1_Click(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;dadoCripto =
        Cripto.&lt;span style="color:#2b91af;"&gt;Cryptographer&lt;/span&gt;.EncryptSymmetric(
        &lt;span style="color:#a31515;"&gt;&amp;quot;RijndaelManaged&amp;quot;&lt;/span&gt;,
        TextBox1.Text);
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;dadoOriginal =
        Cripto.&lt;span style="color:#2b91af;"&gt;Cryptographer&lt;/span&gt;.DecryptSymmetric(
        &lt;span style="color:#a31515;"&gt;&amp;quot;RijndaelManaged&amp;quot;&lt;/span&gt;,
        dadoCripto);

    Label1.Text = &lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(
        &lt;span style="color:#a31515;"&gt;&amp;quot;A string do TextBox criptografada ficar&amp;aacute; assim: &amp;lt;br /&amp;gt;&amp;quot; &lt;/span&gt;+
        &lt;span style="color:#a31515;"&gt;&amp;quot;{0}&amp;lt;br /&amp;gt;&amp;quot; &lt;/span&gt;+
        &lt;span style="color:#a31515;"&gt;&amp;quot;A string original &amp;eacute;: &amp;lt;br /&amp;gt;&amp;quot; &lt;/span&gt;+
        &lt;span style="color:#a31515;"&gt;&amp;quot;{1}&amp;quot;&lt;/span&gt;,
        dadoCripto, dadoOriginal);
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esse c&amp;oacute;digo ter&amp;aacute; o seguinte resultado:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mLd1bF5ryZNcNYOsYWe-ggR6rmAERkxUxw-9JQhyLAJR4UgkVvY9N1dv2XzQBwBaxO5i43flkLJ1hZ9W4OOJBaouaILgU_lZryIVpUbFhTxv98OVYoVbP6B_VBPxr5Uqlm0hE-nuip8CubGJnKj9T_Q/12[3].gif" rel="WLPP"&gt;&lt;img title="12" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="232" alt="12" src="https://oggura.bay.livefilestore.com/y1mNV6RgjDZZdLRKMQG6Zhy2PA_ximmQvsNfzQDa8h3hmlmT9Wg1wHTZwEswTDx1wojSlrBkoNKXGjxfbVMwXPDhjxECyiSSEpx5kWdvIHSd8PwLo-vzFVbngI3D1LF0ooD7H0oG8vUCAwqjFTFDcPmMg/12_thumb[1].gif" width="622" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;[]&amp;rsquo;s e at&amp;eacute; a pr&amp;oacute;xima!
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Conclus&amp;atilde;o&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Mostrei apenas um dos diversos algoritmos j&amp;aacute; prontos de criptografia. O que demonstra enorme potencial dessa biblioteca.&lt;br /&gt;Experimente os outros algoritmos. Depois que estiver craque, tente transformar os dados em hash.
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Ref&amp;ecirc;ncias&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=1643758B-2986-47F7-B529-3E41584B6CE5&amp;amp;displaylang=en" target="_blank"&gt;[ Download ]&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd203099.aspx" target="_blank"&gt;[ Microsoft Enterprise Library 4.1 &amp;ndash; October 2008 ]&lt;/a&gt;  &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=37" width="1" height="1"&gt;</description></item><item><title>Abrindo arquivos em modo compartilhado para leitura e escrita com C#</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/abrindo-arquivos-em-modo-compartilhado-para-leitura-e-escrita-com-c.aspx</link><pubDate>Tue, 02 Jun 2009 01:40:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:34</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=34</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/abrindo-arquivos-em-modo-compartilhado-para-leitura-e-escrita-com-c.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Hoje eu estava com um problema bem simples de se resolver. Abrir um arquivo texto. Para fazer isso escrevi o c&amp;oacute;digo abaixo:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo1 = &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Read);

    arquivo1.Close();
    arquivo1.Dispose();
}&lt;/pre&gt;
&lt;p&gt;Bem direto o c&amp;oacute;digo. S&amp;oacute; que o problema surge quando dois acessos simult&amp;acirc;neos s&amp;atilde;o feitos no arquivo.&lt;br /&gt;O compilador avisa em tempo de execu&amp;ccedil;&amp;atilde;o que o objeto j&amp;aacute; est&amp;aacute; em uso por outro processo.&lt;/p&gt;
&lt;pre&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mD-Wnejdmgp6H9tFJS3mRl2xcDHShTvD311RoyeaTt4YUN40XXt0sP0xACye00pKufzfGa96f_ALY7cHe2-bjBzLR9SdqxJQIAsNOosd1H1kthoASwiseQRhunEIYV79Csp_e99mPoG4/image[3]%203DEEBF23.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="269" alt="image" src="https://oggura.bay.livefilestore.com/y1mB6nUzbUfF-269Q5Gi608uTdQrOSXHZ1CXi__yK469wI2qdjQdq9Ypn9AGmrNw0czILatMFBBFo-Xpq2C4qlEBuEZszwbbWjYe4-05AxA4cdZun6ZQLb8vsSjxIpu9JzCkMjxaU45xKY/image_thumb[1]%206D8EACB9.png" width="456" border="0" /&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;p&gt;Para resolver esse problema devemos usar o terceiro construtor.&lt;br /&gt;Nesse construtor conseguimos defininir o tipo de acesso ao arquivo.&lt;br /&gt;Ou seja se ele vai ser compartilhado ou n&amp;atilde;o. Abaixo imagem do construtor.
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mmpOw5rA3YI73vgE9WC1P8yHk3nJmyJq1AXN0Hw6cG0MaFsRw-Cw_MpskeNLBXKY6wtSUXGqcrXU9dXTOPXYRDuzEZNy3ezpGb1nx3yXQyeXPBrbQioLuThzXYd9VlVlmZ0VSIMXOcJ4/image[7]%201921BBCD.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="37" alt="image" src="https://oggura.bay.livefilestore.com/y1mJkSuwHC6_xZh-eWv1AKBgkFbzOCK4J093B48KTtNRuDd81isRj8E2Y5IGLwHg_UdtcX2ESYWkUgDUdCwE3YKfcpftL2DVxJ5X_QUeTNZUTFzwsVhdPwi1DFIYwRJYD3gABxqbYzteKY/image_thumb[3]%2056915EAD.png" width="494" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Ajustando o c&amp;oacute;digo para que o arquivo tenha v&amp;aacute;rios acessos simult&amp;acirc;neos, ficar&amp;aacute; dessa forma:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo1 = 
    &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Read, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.Read);&lt;/pre&gt;
&lt;p&gt;Pronto. Acesso sem restri&amp;ccedil;&amp;otilde;es para leitura no arquivo. S&amp;oacute; que eu n&amp;atilde;o sou f&amp;atilde; de problemas f&amp;aacute;ceis. Vamos complicar um pouco.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como escrever nesse mesmo arquivo que est&amp;aacute; em est&amp;aacute; em modo de leitura compartilhada?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;Para responder essa pergunta eu vou simular dois acessos simult&amp;acirc;neos para abertura do arquivo e uma terceira tentativa para abrir e escrever no arquivo. Vamos ao c&amp;oacute;digo:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo1 = 
        &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Read, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.Read);

    &lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo2 = 
        &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Read, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.Read);

    &lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo3 = 
        &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Write, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.Write);

    arquivo1.Close();
    arquivo1.Dispose();

    arquivo2.Close();
    arquivo2.Dispose();

    arquivo3.Close();
    arquivo3.Dispose();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;Ao executarmos o c&amp;oacute;digo, o erro abaixo &amp;eacute; retornado na execu&amp;ccedil;&amp;atilde;o do objeto arquivo3.&lt;/pre&gt;
&lt;pre&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mD-Wnejdmgp6H9tFJS3mRl2xcDHShTvD311RoyeaTt4YUN40XXt0sP0xACye00pKufzfGa96f_ALY7cHe2-bjBzLR9SdqxJQIAsNOosd1H1kthoASwiseQRhunEIYV79Csp_e99mPoG4/image[3]%203DEEBF23.png"&gt;&lt;img title="image" height="269" alt="image" src="https://oggura.bay.livefilestore.com/y1mB6nUzbUfF-269Q5Gi608uTdQrOSXHZ1CXi__yK469wI2qdjQdq9Ypn9AGmrNw0czILatMFBBFo-Xpq2C4qlEBuEZszwbbWjYe4-05AxA4cdZun6ZQLb8vsSjxIpu9JzCkMjxaU45xKY/image_thumb[1]%206D8EACB9.png" width="456" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;Este erro acontece, porque o arquivo &amp;ldquo;exemplo.txt&amp;rdquo; est&amp;aacute; liberado apenas para acesso no modo compartilhado de leitura.&lt;br /&gt; Para resolvermos isso, devemos dar a permiss&amp;atilde;o para leitura/escrita.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e) {
    &lt;span style="color:green;"&gt;// ABRINDO ARQUIVO PARA LEITURA/ESCRITA
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo1 = 
        &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Read, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.ReadWrite);

    &lt;span style="color:green;"&gt;// ABRINDO ARQUIVO PARA LEITURA/ESCRITA
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo2 =
        &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Read, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.ReadWrite);

    &lt;span style="color:green;"&gt;// ABRINDO O ARQUIVO PARA LEITURA/ESCRITA
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FileStream &lt;/span&gt;arquivo3 =
        &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Open(&lt;span style="color:#a31515;"&gt;@&amp;quot;c:\temp\exemplo.txt&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Write, &lt;span style="color:#2b91af;"&gt;FileShare&lt;/span&gt;.ReadWrite);

    &lt;span style="color:green;"&gt;// ESCREVENDO NO ARQUIVO QUE EST&amp;Aacute; ABERTO POR OUTRO 2 PROCESSOS
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StreamWriter &lt;/span&gt;sw = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt;(arquivo3);
    sw.Write(&lt;span style="color:#a31515;"&gt;&amp;quot;Escrevendo em um arquivo aberto por outro processo&amp;quot;&lt;/span&gt;);
    sw.Close();

    &lt;span style="color:green;"&gt;// FECHANDO ARQUIVO 1
    &lt;/span&gt;arquivo1.Close();
    arquivo1.Dispose();

    &lt;span style="color:green;"&gt;// FECHANDO ARQUIVO 2
    &lt;/span&gt;arquivo2.Close();
    arquivo2.Dispose();

    &lt;span style="color:green;"&gt;// FECHANDO ARQUIVO 3
    &lt;/span&gt;arquivo3.Close();
    arquivo3.Dispose();
}&lt;/pre&gt;
&lt;p&gt;O resultado dentro do arquivo exemplo.txt ser&amp;aacute; este:&lt;/p&gt;
&lt;pre&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mJyWzTesggwkP2EdkkvVbEC6HxlVHcmq6x-wJZD9Cp78LG1wBxLh82fsmsB5yjeftoRfLFddgE_LblmdCNTp9fmAU_uQVqE8sfv5hKWHB9HhIIVofnnDXTXgkGobMPmwNsQVc78Vk5gE/image[11]%2028EFF350.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="144" alt="image" src="https://oggura.bay.livefilestore.com/y1mVKE-sgRRQP3UOD4lr3GFZXo8g0wVFScE3N4SLgBEZGWYydCD73mDYAMLtv13-yAKu6CGA0bJ2IylyYz3GGhdsS1dEAmLHWapPtcIjfMZCeNGdL5-xd0nweTmK2c2ckIjWHIeJz8lwMg/image_thumb[5]%204881122F.png" width="510" border="0" /&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/arquivo" rel="tag"&gt;arquivo&lt;/a&gt;,&lt;a href="http://technorati.com/tags/compartilhado" rel="tag"&gt;compartilhado&lt;/a&gt;,&lt;a href="http://technorati.com/tags/FileMode" rel="tag"&gt;FileMode&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Open" rel="tag"&gt;Open&lt;/a&gt;,&lt;a href="http://technorati.com/tags/FileAccess" rel="tag"&gt;FileAccess&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Read" rel="tag"&gt;Read&lt;/a&gt;,&lt;a href="http://technorati.com/tags/FileShare" rel="tag"&gt;FileShare&lt;/a&gt;,&lt;a href="http://technorati.com/tags/FileStream" rel="tag"&gt;FileStream&lt;/a&gt;,&lt;a href="http://technorati.com/tags/File" rel="tag"&gt;File&lt;/a&gt;,&lt;a href="http://technorati.com/tags/abrir" rel="tag"&gt;abrir&lt;/a&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=34" width="1" height="1"&gt;</description></item><item><title>Programação MultiThread com C# – Parte 2</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/programa-231-227-o-multithread-com-c-parte-2.aspx</link><pubDate>Tue, 02 Jun 2009 01:39:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:33</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=33</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/programa-231-227-o-multithread-com-c-parte-2.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Eu havia terminado a &lt;a href="http://marcossabinofilho.spaces.live.com/blog/cns!A771EB57CF797D19!346.entry" target="_blank"&gt;&lt;strong&gt;primeira parte do artigo&lt;/strong&gt;&lt;/a&gt; respondendo a pergunta: &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Como fa&amp;ccedil;o para executar um c&amp;oacute;digo somente depois que todas as threads estiverem finalizadas?&amp;rdquo;&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;E respondi a pergunta usando um loop. Mas h&amp;aacute; uma outra forma de resolver esse problema ( bem mais simples diga-se de passagem ). Usando loop para esse caso vai parecer muito complicado perto do que vou explicar. Vamos &amp;agrave; outra forma. &lt;/p&gt;
&lt;p&gt;A classe Thread possui um m&amp;eacute;todo chamado &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx" target="_blank"&gt;Join()&lt;/a&gt;&lt;/strong&gt;. O prop&amp;oacute;sito dele &amp;eacute; bem simples. Enquanto a Thread n&amp;atilde;o terminar, o sistema fica bloqueado. Para exemplificar o que estou falando, vamos modificar a Main, deixando igual ao c&amp;oacute;digo abaixo:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(2);
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(3);

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc1.ExecutaCalculo));
    tarefa1.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 1&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc2.ExecutaCalculo));
    tarefa2.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 2&amp;quot;&lt;/span&gt;;

    tarefa1.Start();
    tarefa2.Start();

    tarefa1.Join();

    &lt;span style="color:green;"&gt;/*
     * PARA DEMONSTRAR QUE O C&amp;Oacute;DIGO ABAIXO S&amp;Oacute; &amp;Eacute; EXECUTADO
     * QUANDO A THREADS BLOQUEADA FOR FINALIZADA.
     */
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(tarefa1.ThreadState != &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped)
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;A tarefa 1 ainda n&amp;atilde;o finalizou a execu&amp;ccedil;&amp;atilde;o.&amp;quot;&lt;/span&gt;);

    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(tarefa2.ThreadState != &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped)
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;A tarefa 2 ainda n&amp;atilde;o finalizou a execu&amp;ccedil;&amp;atilde;o.&amp;quot;&lt;/span&gt;);

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Todas as threads finalizadas.&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Se executarmos o c&amp;oacute;digo acima vamos obter o seguinte resultado:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mBEm4xHBSIfLxWP3c8Z8b8o_ahO9ynrB8mALrjwZ8oVlo63ld4qQE_FDW0XskW33Pq5U3jpFKYhSAEZVvmvykhVAw9IkHDe173EX7DBmnwSqZ5xqtmz-lQOZOabKhuzNjBfrr2G48mz0/image[3]%2018B8C631.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="128" alt="image" src="https://oggura.bay.livefilestore.com/y1moCphcybMEY1FgBjtaB_hVrr2ZDh10LxN2gr3fiT8IqUuQIvBYtZVxpUXKAHenXy4fRRl_-T1VLjMLJ_4jBzdPaTb4a7mJ9vLyW1hyGPZNWwYNo9z502UJUUbDCGUnfugp5Gj9MS9X9o/image_thumb[1]%2065CB04D3.png" width="353" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Nota-se que o sistema n&amp;atilde;o ficou totalmente bloqueado quando printou na tela &amp;ldquo;Todas as threads finalizadas.&amp;rdquo;. Isso aconteceu por que bloqueamos apenas a tarefa1. Quando a tarefa1 terminou sua execu&amp;ccedil;&amp;atilde;o, o sistema continou normalmente.
&lt;/p&gt;
&lt;p&gt;Para deixarmos o sistema totalmente bloqueado at&amp;eacute; o t&amp;eacute;rmino de todas as threads, devemos chamar o Join() para todas as threads que foram iniciadas. Para fazermos isso, devemos deixar o c&amp;oacute;digo da Main igual ao abaixo:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(2);
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(3);

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc1.ExecutaCalculo));
    tarefa1.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 1&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc2.ExecutaCalculo));
    tarefa2.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 2&amp;quot;&lt;/span&gt;;

    tarefa1.Start();
    tarefa2.Start();

    tarefa1.Join();
    tarefa2.Join();

    &lt;span style="color:green;"&gt;/*
     * PARA DEMONSTRAR QUE O C&amp;Oacute;DIGO ABAIXO S&amp;Oacute; &amp;Eacute; EXECUTADO
     * QUANDO A THREADS BLOQUEADA FOR FINALIZADA.
     */
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(tarefa1.ThreadState != &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped)
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;A tarefa 1 ainda n&amp;atilde;o finalizou a execu&amp;ccedil;&amp;atilde;o.&amp;quot;&lt;/span&gt;);

    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(tarefa2.ThreadState != &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped)
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;A tarefa 2 ainda n&amp;atilde;o finalizou a execu&amp;ccedil;&amp;atilde;o.&amp;quot;&lt;/span&gt;);

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Todas as threads finalizadas.&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;O resultado ser&amp;aacute;:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mxv7_0RVqxaqBMBs27078SDOGPd3T3ttSQn-dZr7oaJQK9-hKzk5eVZAlGmp3U0cgBioBRII5_Y69DFqgqTUF-GAgucrt2A41SOKS7Y83UYDsVxygTpjU9dyPgcljTBDpFs-txv-G3ww/image[7]%201A4B1575.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="117" alt="image" src="https://oggura.bay.livefilestore.com/y1mvskGkSCw_nWQRREslC8mFOKblQ4V7nBnFkpQEEGBDTHNvR1fA3plEE9EplpkgdcXP4uKwLzDollN4wJBhA2t_TJh1MumJdD3TE2AogL5tUXph8uiFgx7Mz4mzHHSjgi9e0PaMA38NE0/image_thumb[3]%2074351984.png" width="248" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Bem mais f&amp;aacute;cil utilizar o m&amp;eacute;todo Join() no lugar do loop, n&amp;atilde;o &amp;eacute; mesmo? 
&lt;/p&gt;
&lt;p&gt;Agora vou dar uma dica direta para o pessoal que pensa em utilizar MultiThread em requisi&amp;ccedil;&amp;otilde;es Web. Falo isso pelo simples fato de que uma requisi&amp;ccedil;&amp;atilde;o web pode demorar ou at&amp;eacute; mesmo travar e n&amp;atilde;o retornar. E usando o Join() para esperar o t&amp;eacute;rmino das tarefas pode n&amp;atilde;o ser a melhor op&amp;ccedil;&amp;atilde;o, por que o site vai ficar parado at&amp;eacute; que a requisi&amp;ccedil;&amp;atilde;o termine.
&lt;/p&gt;
&lt;p&gt;Para casos como esse, o Join() possui uma sobrecarga &lt;strong&gt;Join(int millisecondsTimeout)&lt;/strong&gt; onde devemos informar quantos milisegundos a fun&amp;ccedil;&amp;atilde;o principal dever&amp;aacute; ficar esperando o t&amp;eacute;rmino da thread. Caso esse tempo seja ultrapassado, a fun&amp;ccedil;&amp;atilde;o principal ser&amp;aacute; desbloqueada. Para demonstrar a utiliza&amp;ccedil;&amp;atilde;o dessa sobrecarga, vou fazer uma pequena modifica&amp;ccedil;&amp;atilde;o na classe Calcula. A atualiza&amp;ccedil;&amp;atilde;o est&amp;aacute; por conta do while(true) para simular uma requiso&amp;ccedil;&amp;atilde;o que nunca termina. O c&amp;oacute;digo deve ficar igual ao abaixo.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;{

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Vari&amp;aacute;vel para controlar a quantidade de repeti&amp;ccedil;&amp;otilde;es
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;private int &lt;/span&gt;_repeticoes;

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Construtor classe Calcula
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;repeticoes&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;Quantidade de repeti&amp;ccedil;oes&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public &lt;/span&gt;Calcula(&lt;span style="color:blue;"&gt;int &lt;/span&gt;repeticoes) {
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;._repeticoes = repeticoes;
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;M&amp;eacute;todo que ir&amp;aacute; simular um c&amp;aacute;lculo qualquer
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public void &lt;/span&gt;ExecutaCalculo() {
        &lt;span style="color:green;"&gt;// LOOPING INFINITO PARA SIMULAR UMA REQUISI&amp;Ccedil;&amp;Atilde;O QUE NUNCA TERMINA.
        &lt;/span&gt;&lt;span style="color:blue;"&gt;while &lt;/span&gt;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;) {
        }
    }

}&lt;/pre&gt;
&lt;p&gt;E na fun&amp;ccedil;&amp;atilde;o principal a modifica&amp;ccedil;&amp;atilde;o fica por conta da utiliza&amp;ccedil;&amp;atilde;o da sobrecarga do Join() e um tratamento de erro para as threads que permanecerem executando. O c&amp;oacute;digo abaixo faz essas modifica&amp;ccedil;&amp;otilde;es.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(2);
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(3);

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc1.ExecutaCalculo));
    tarefa1.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 1&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc2.ExecutaCalculo));
    tarefa2.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 2&amp;quot;&lt;/span&gt;;

    tarefa1.Start();
    tarefa2.Start();

    &lt;span style="color:green;"&gt;/*
     * COLOCANDO UM TEMPO DE ESPERA PARA FICAR &amp;quot;BLOQUEADO&amp;quot;.
     * SE ULTRAPASSAR O SISTEMA &amp;Eacute; DESBLOQUEADO.
     */
    &lt;/span&gt;tarefa1.Join(5);
    tarefa2.Join(6);

    &lt;span style="color:green;"&gt;/*
     * PARA DEMONSTRAR SE A THREAD TERMINOU SUA EXECU&amp;Ccedil;&amp;Atilde;O.
     */
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;(tarefa1.ThreadState != &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped) {
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;A tarefa 1 ainda n&amp;atilde;o finalizou a execu&amp;ccedil;&amp;atilde;o, for&amp;ccedil;ando sua finaliza&amp;ccedil;&amp;atilde;o.&amp;quot;&lt;/span&gt;);
        tarefa1.Abort();
    }

    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(tarefa2.ThreadState != &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped) {
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;A tarefa 2 ainda n&amp;atilde;o finalizou a execu&amp;ccedil;&amp;atilde;o, for&amp;ccedil;ando sua finaliza&amp;ccedil;&amp;atilde;o.&amp;quot;&lt;/span&gt;);
        tarefa2.Abort();
    }

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Todas as threads finalizadas.&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O resultado de todas as modifica&amp;ccedil;&amp;otilde;es ser&amp;aacute; o seguinte:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mP1Pl5S00LG-P6r6ceLPjBWB7vZLQeqDsQrQ76LHqKGVl2buj0xRgyoi7prGfw09IWpf_ZiEGPFpP8VCZv5APqkbEYI_HJDLM7ufTvnOFk6ZjKndrJk8Sglp4rDdZ0wGPoksdg08sjTc/image[11]%2011F5E29D.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="93" alt="image" src="https://oggura.bay.livefilestore.com/y1mXzCpQaQ1VbWMFFtA3spOd-w47Qgqxo3zk51ork3xzHFctdPn1_Wr_OiJU6hSjefkJugsaiWEcR6jRQ9z6iZLW5rEBkkbAvzYUKxRawGTo6HExJwMk1bpjf5pPCXB7--fusU8vYYmmGE/image_thumb[5]%20210E9081.png" width="574" border="0" /&gt;&lt;/a&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Com isso finalizamos a segunda parte do artigo. Espero voc&amp;ecirc;s na terceira e &amp;uacute;ltima parte sobre MultiThreads, onde vou falar sobre trechos cr&amp;iacute;ticos.
&lt;/p&gt;
&lt;p&gt;[]&amp;rsquo;s e at&amp;eacute; a pr&amp;oacute;xima.  &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=33" width="1" height="1"&gt;</description></item><item><title>Programação MultiThread com C# – Parte 1</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/programa-231-227-o-multithread-com-c-parte-1.aspx</link><pubDate>Tue, 02 Jun 2009 01:38:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:32</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=32</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/programa-231-227-o-multithread-com-c-parte-1.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Quem n&amp;atilde;o gostaria de fazer um sistema que fizesse v&amp;aacute;rias requisi&amp;ccedil;&amp;otilde;es ao mesmo tempo?&lt;br /&gt;Quem n&amp;atilde;o ficaria seduzido s&amp;oacute; de escutar que h&amp;aacute; a possibilidade? &lt;/p&gt;
&lt;p&gt;Poss&amp;iacute;vel com certeza &amp;eacute;. Mas temos que tomar certos cuidados para n&amp;atilde;o ca&amp;iacute;rmos em algumas pegadinhas que a programa&amp;ccedil;&amp;atilde;o concorrente prega nos inesperientes de plant&amp;atilde;o. &lt;/p&gt;
&lt;p&gt;A l&amp;oacute;gica &amp;eacute; relativamente simples de ser compreendida, e j&amp;aacute; est&amp;aacute; na cabe&amp;ccedil;a de muitos desenvolvedores: O fluxo seria mais ou menos assim: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Criar o objeto da classe que cont&amp;eacute;m uma fun&amp;ccedil;&amp;atilde;o; &lt;/li&gt;
&lt;li&gt;Criar uma thread para cada classe criada no passo acima e finalmente &lt;/li&gt;
&lt;li&gt;Mandar executar todas as threads ao mesmo tempo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lendo os 3 itens acima, acabo de perceber que o mundo &amp;eacute; perfeito. Mas n&amp;atilde;o &amp;eacute; assim que o mundo da programa&amp;ccedil;&amp;atilde;o funciona.&lt;br /&gt;O que vai acontecer se as threads criadas estiverem acessando o mesmo banco ao mesmo tempo? Com certeza ir&amp;aacute; ocorrer Dead Lock.&lt;br /&gt;E se todas utilizarem uma vari&amp;aacute;vel compartilhadas? Com certeza o resultado final n&amp;atilde;o vai ser o esperado.&lt;br /&gt;E se o tempo limite de execu&amp;ccedil;&amp;atilde;o estorou? Com certeza n&amp;atilde;o vou descobrir quando isso ocorrer.&lt;br /&gt;Pensando nesses e outras centenas de problemas que acontecem no mundo corporativo, resolvi pesquisar bastante sobre o assunto, e vou apresentar uma s&amp;eacute;ria o mais completa poss&amp;iacute;vel sobre o assunto. &lt;/p&gt;
&lt;p&gt;A classe que ser&amp;aacute; a base desse artigo ser&amp;aacute; a &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;. Ela pertence ao NameSpace System.Threading. &lt;/p&gt;
&lt;p&gt;Para demonstrar o funcionamento do MultiThread, devemos criar um projeto do tipo Console Application. Depois de criado o projeto, copiem o c&amp;oacute;digo da classe Calcula (definida abaixo) acima da classe Program:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;{

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Vari&amp;aacute;vel para controlar a quantidade de repeti&amp;ccedil;&amp;otilde;es
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;private int &lt;/span&gt;_repeticoes;

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Construtor classe Calcula
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;repeticoes&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;Quantidade de repeti&amp;ccedil;oes&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public &lt;/span&gt;Calcula(&lt;span style="color:blue;"&gt;int &lt;/span&gt;repeticoes) {
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;._repeticoes = repeticoes;
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;M&amp;eacute;todo que ir&amp;aacute; simular um c&amp;aacute;lculo qualquer
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public void &lt;/span&gt;ExecutaCalculo(){
        &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; _repeticoes; i++) {
            &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.Sleep(500);
            &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.Name);
        }
    }
}

&lt;span style="color:blue;"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program &lt;/span&gt;{

    &lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {

    }
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Essa classe ser&amp;aacute; usada para ilustrar como seria uma classe real que realiza algum tipo de c&amp;aacute;lculo ou requisi&amp;ccedil;&amp;atilde;o &amp;agrave; algum WebService. O passo seguinte &amp;eacute; criar os objetos, definir as threads, e pedir para que executem ao mesmo tempo (como definimos no in&amp;iacute;cio do artigo). O c&amp;oacute;digo abaixo faz esse trabalho pra n&amp;oacute;s.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(2);
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(3);

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc1.ExecutaCalculo));
    tarefa1.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 1&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc2.ExecutaCalculo));
    tarefa2.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 2&amp;quot;&lt;/span&gt;;

    tarefa1.Start();
    tarefa2.Start();
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O resultado ser&amp;aacute; o seguinte:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mYpd_SCNF24Op0N5JPcrOZZgcpReWdPUwRhihL1r0yq6O3tGeymuKHlrajanHY6cYbQXCL01P6RE_ntBXIp_Xo0usokAsRekakXsz8Cz4G0ufh6K3Nw87ov78NXigD1c-yb9qWCDmpko/image[2].png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="138" alt="image" src="https://oggura.bay.livefilestore.com/y1mgDijhSGoNspAQHMSoxtfeHaS4sf2Jc23gHk7jyRytppsIVobUozqveiq7L5y4GtooB5CXYoe9e0esysMcMk7dqj2wEnOJUbH2e4qK_W9qO892MxeLoEscLTOBLUFrLqlD0GSjN8MQfU/image_thumb.png" width="196" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;At&amp;eacute; aqui o resultado j&amp;aacute; ajuda muitas pessoas, caso n&amp;atilde;o ocorra nenhum dos problemas que citei no in&amp;iacute;cio.
&lt;/p&gt;
&lt;p&gt;Vamos complicar um pouco ent&amp;atilde;o com uma pergunta muito simples. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como fa&amp;ccedil;o para executar um c&amp;oacute;digo somente depois que todas as threads estiverem finalizadas?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;Simples! &amp;Eacute; s&amp;oacute; adicionar o c&amp;oacute;digo &amp;ldquo; &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Todas as threads finalizadas.&amp;quot;&lt;/span&gt;);&amp;rdquo; logo depois de iniciar as threads, isso ir&amp;aacute; simular quando as tarefas finalizarem. ( Abaixo o c&amp;oacute;digo completo da Main).&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(2);
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(3);

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc1.ExecutaCalculo));
    tarefa1.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 1&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc2.ExecutaCalculo));
    tarefa2.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 2&amp;quot;&lt;/span&gt;;

    tarefa1.Start();
    tarefa2.Start();

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Todas as threads finalizadas.&amp;quot;&lt;/span&gt;);
}&lt;/pre&gt;
&lt;pre&gt;Correto? Errado! Vejam voc&amp;ecirc;s o resultado da lamban&amp;ccedil;a que fizemos:&lt;/pre&gt;
&lt;pre&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mWrbeNAaEo67M-4fza0y19jX9AOctsVc9KHf40-4SZVfZ2c9BtE1x-IdW9ryFmmsjEHq5ndrmMmyE_FYU3YP8CeY4MIBwRJB4ZSSqhUokqa0GX5R41or9wUAcAJv3Dk8Lt-mYt1_LRBs/image[5]%201ACD378B.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="133" alt="image" src="https://oggura.bay.livefilestore.com/y1mJ09bqHyuBYx-ItffYtdUh2RcPByzVYWWtCm_3ijsWuXSD_lVHAmj9mRIfypYEkoTIUmkSUlBxjqqXvymHCTaF3JkjmWxjeJGnCFIfSkkbKw9lm2TY_exDXt5jOcioe1o6ZXENCHN-xs/image_thumb[1]%202DCE189D.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;O que era muito simples, acaba de se tornar uma dificuldade moderada em termos de codifica&amp;ccedil;&amp;atilde;o. Mas por que aconteceu isso?
&lt;/p&gt;
&lt;p&gt;Isso acontece por que a Main continua executando independente das outras threads. Por padr&amp;atilde;o ela n&amp;atilde;o tem uma trava para continuar depois que as outras threads concorrentes sejam finalizadas. Se existisse uma trava, ver&amp;iacute;amos o output da Tarifa1 e depois que ela finalizasse, ver&amp;iacute;amos o output da Tarefa2. Para deixarmos essa &amp;ldquo;trava&amp;rdquo;, vamos deixar a Main da seguinte forma.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(2);
    &lt;span style="color:#2b91af;"&gt;Calcula &lt;/span&gt;calc2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Calcula&lt;/span&gt;(3);

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa1 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc1.ExecutaCalculo));
    tarefa1.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 1&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ThreadStart&lt;/span&gt;(calc2.ExecutaCalculo));
    tarefa2.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Tarefa 2&amp;quot;&lt;/span&gt;;

    &lt;span style="color:green;"&gt;// CRIANDO UMA LISTA DE TAREFAS, PARA QUE SEJAM GERENCI&amp;Aacute;VEIS
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;&amp;gt; listaTarefas = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;&amp;gt;();
    listaTarefas.Add(tarefa1);
    listaTarefas.Add(tarefa2);

    &lt;span style="color:green;"&gt;// INICIANDO TODAS AS TAREFAS
    &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Thread &lt;/span&gt;tarefa &lt;span style="color:blue;"&gt;in &lt;/span&gt;listaTarefas) {
        tarefa.Start();
    }

    &lt;span style="color:green;"&gt;// VERIFICANDO O STATUS DE CADA TAREFA
    &lt;/span&gt;&lt;span style="color:blue;"&gt;while &lt;/span&gt;(listaTarefas.Count &amp;gt; 0) {
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.Sleep(1000);

        &lt;span style="color:green;"&gt;// REMOVE AS TAREFAS J&amp;Aacute; FINALIZADAS.
        &lt;/span&gt;&lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = listaTarefas.Count - 1; i &amp;gt;= 0; i--) {
            &lt;span style="color:blue;"&gt;if &lt;/span&gt;(listaTarefas&lt;img src="http://buildbrasil.org/emoticons/emotion-55.gif" alt="Idea" /&gt;.ThreadState == &lt;span style="color:#2b91af;"&gt;ThreadState&lt;/span&gt;.Stopped) {
                listaTarefas.RemoveAt(i);
            }
        }
    }

    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Todas as threads finalizadas.&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;
&lt;p&gt;O resultado ser&amp;aacute; o seguinte:
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://oggura.bay.livefilestore.com/y1mKYQI1PW4AA61MH4MxczB0Sa8a4jcA0EKn51EFPngTaF6xELbrDPgIPgIcupuHVuAUxzo1XUstdPJuoHrw0WZvQ1e4gE5Dwf6QLHtTF3fNXhnSZoSEe0biLEtbH4SGHbNWRsr7QFA3Bw/image&lt;img src="http://buildbrasil.org/emoticons/emotion-29.gif" alt="Music" /&gt;.png" rel="WLPP"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="119" alt="image" src="https://oggura.bay.livefilestore.com/y1mJ1XGDirujX-40MbMehXXHiC-GtBY0tYc1Lv05QxhVX0rfbYPDUkbOlOa5RaQzWgMJnlzpX8WUrPqCBQRwiExKiuC0ea05nKoccAIm3KZiTxADQCBMJqSYDNXdvL4HE2HnlBfaGgbW0Y/image_thumb[2]%2042EB36D1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Agora sim podemos dizer que temos uma aplica&amp;ccedil;&amp;atilde;o MultiThread.
&lt;/p&gt;
&lt;p&gt;Na continua&amp;ccedil;&amp;atilde;o vou falar sobre timeout para as threads e trechos cr&amp;iacute;ticos de c&amp;oacute;digo.
&lt;/p&gt;
&lt;p&gt;Espero que tenham gostado e at&amp;eacute; a continua&amp;ccedil;&amp;atilde;o do artigo.  &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=32" width="1" height="1"&gt;</description></item><item><title>Utilizando o método List&lt;T&gt;.Find() – Busca em Lista Genérica</title><link>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/uitilizando-o-m-233-todo-list-lt-t-gt-find-busca-em-lista-gen-233-rica.aspx</link><pubDate>Tue, 02 Jun 2009 01:37:00 GMT</pubDate><guid isPermaLink="false">3b1c08db-c3ff-44fe-a09b-fe729e8666b2:31</guid><dc:creator>Marcos Sabino Filho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://buildbrasil.org/blogs/csharp/rsscomments.aspx?PostID=31</wfw:commentRss><comments>http://buildbrasil.org/blogs/csharp/archive/2009/06/01/uitilizando-o-m-233-todo-list-lt-t-gt-find-busca-em-lista-gen-233-rica.aspx#comments</comments><description>&lt;p&gt;Ol&amp;aacute; pessoal, &lt;/p&gt;
&lt;p&gt;Quem trabalha com o Visual Studio 2005 n&amp;atilde;o pode usufruir do LINQ. Mas isso n&amp;atilde;o &amp;eacute; motivo para desespero, por que com o Framework 2.0 veio a Generic List. Com a Generic List podemos fazer uma lista de qualquer tipo de objeto. E veio tamb&amp;eacute;m alguns m&amp;eacute;todos. E o m&amp;eacute;todo para se trabalhar com buscas em uma Generic List &amp;eacute; m&amp;eacute;todo &lt;strong&gt;Find()&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Para iniciar, vamos criar um projeto do tipo Console Application. Assim que o projeto estiver criado, vamos adicionar uma nova classe chamada Pessoa. Para fazer isso, &amp;eacute; s&amp;oacute; clicar com o bot&amp;atilde;o direito no projeto, depois em Add e em seguida Class. &lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1m_Xn-OWtSZquW0kZrKDCvzJO9ECYumG0_u0zH63ee9XJE_Gm5dpG1hllXt-TEPtMAO2vmU6LfPHzR-m8AXO4Wp2SVlVp8pBwNFjiVjBgpnUBvD-n1qkOOwYluyYFofQZwOEWOa_0dpqk/image[3]%20504FB425.png"&gt;&lt;img border="0" width="294" src="https://oggura.bay.livefilestore.com/y1miYvsHY4ezrmG_p5qC78GSY-L2na5qRuqEzmeDxGOr-Lb7eirTEbO96eI3xsl47TA557tOGlhmXgoH7189NDpFEKfmdpGT0YZdjjoCyXCr1aeuu3LqMjgPaE9FxVJwS-VHlRGZd9tXEg/image_thumb[1]%205CC23709.png" alt="image" height="294" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="image" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;O passo seguinte &amp;eacute; nomear a classe. D&amp;ecirc; o nome Pessoa para essa classe. &lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mB3OBj1DNBV_s6gW6T8aIDbPbtMesvYB5vwxm5cLI_XZevASxxGgiTMr-hW1ePbW28N5cLkIHoUb_WxGvmGSolQqi_I1dL64mDYgVg2bQQa6E77ba3iRFGzuMAJKuzW69Dw5MQ9lMnlE/image[7].png"&gt;&lt;img border="0" width="481" src="https://oggura.bay.livefilestore.com/y1mU1niq2hdsVJdxYIRrT8fQHq1PPA2fxhkgZDCltK5LtdWzmBXexzlddruTmBJZS6pRvrcWBpBki4-iyTdzdOfprq7p2R9wcDtNoeddz6gcDfFs6HxaB0lZzCZitL1DHpnVmICYSaorqc/image_thumb[3].png" alt="image" height="297" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="image" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Ap&amp;oacute;s a cria&amp;ccedil;&amp;atilde;o da classe, vamos usar o seguinte c&amp;oacute;digo de estrutura&amp;ccedil;&amp;atilde;o para a classe.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa &lt;/span&gt;{

    &lt;span style="color:blue;"&gt;private int &lt;/span&gt;_id;
    &lt;span style="color:blue;"&gt;private string &lt;/span&gt;_nome;
    &lt;span style="color:blue;"&gt;private string &lt;/span&gt;_cidade;

    &lt;span style="color:blue;"&gt;public int &lt;/span&gt;ID { &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;_id; } &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ _id = &lt;span style="color:blue;"&gt;value&lt;/span&gt;; } }
    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Nome { &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;_nome; } &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ _nome = &lt;span style="color:blue;"&gt;value&lt;/span&gt;; } }
    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Cidade { &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;_cidade; } &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ _cidade = &lt;span style="color:blue;"&gt;value&lt;/span&gt;; } }

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;Pessoa(&lt;span style="color:blue;"&gt;int &lt;/span&gt;id, &lt;span style="color:blue;"&gt;string &lt;/span&gt;nome, &lt;span style="color:blue;"&gt;string &lt;/span&gt;cidade) {
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.ID = id;
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Nome = nome;
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Cidade = cidade;
    }

}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;A classe Pessoa tem uma estrutura bem simples. Ela tem um campo de identifica&amp;ccedil;&amp;atilde;o (ID), um campo para o nome e outro para a cidade. O intuito aqui &amp;eacute; fazer uma lista com esse objeto e realizar algumas buscas. &lt;/p&gt;
&lt;p&gt;Para demonstrar a utiliza&amp;ccedil;&amp;atilde;o, vamos usar o c&amp;oacute;digo abaixo da Main da aplica&amp;ccedil;&amp;atilde;o:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {
    &lt;span style="color:green;"&gt;// CRIA&amp;Ccedil;&amp;Atilde;O DA LISTA
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;&amp;gt; listaPessoas = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;&amp;gt;();

    &lt;span style="color:green;"&gt;// ADI&amp;Ccedil;&amp;Atilde;O DE OBJETOS A LISTA
    &lt;/span&gt;listaPessoas.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;(1, &lt;span style="color:#a31515;"&gt;&amp;quot;Marcos&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Sao Paulo&amp;quot;&lt;/span&gt;));
    listaPessoas.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;(2, &lt;span style="color:#a31515;"&gt;&amp;quot;Marcelo&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Sao Jose do Rio Preto&amp;quot;&lt;/span&gt;));
    listaPessoas.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;(3, &lt;span style="color:#a31515;"&gt;&amp;quot;Rodrigo&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Sao Jose do Rio Pardo&amp;quot;&lt;/span&gt;));
    listaPessoas.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;(4, &lt;span style="color:#a31515;"&gt;&amp;quot;Adriano&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Campinas&amp;quot;&lt;/span&gt;));
    listaPessoas.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;(5, &lt;span style="color:#a31515;"&gt;&amp;quot;Andrea&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Garulhos&amp;quot;&lt;/span&gt;));

    &lt;span style="color:green;"&gt;// BUSCA APENAS UM OBJETO QUE TENHA A PROPRIEDADE ID IGUAL A 3
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Pessoa &lt;/span&gt;apenasUma = listaPessoas.Find(&lt;span style="color:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Pessoa &lt;/span&gt;p) {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;p.ID == 3;
    });

    &lt;span style="color:green;"&gt;// ESCREVE NA TELA O USUARIO ENCONTRADO
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Busca pelo ID&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;-------------&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(apenasUma.Nome + &lt;span style="color:#a31515;"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;);

    &lt;span style="color:green;"&gt;// BUSCA TODOS OS OBJETOS QUE TENHAM A PROPRIEDADE CIDADE INICIADA PELA PALAVRA &amp;#39;SAO&amp;#39;
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Pessoa&lt;/span&gt;&amp;gt; umaLista = listaPessoas.FindAll(&lt;span style="color:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Pessoa &lt;/span&gt;p) {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;p.Cidade.StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;Sao&amp;quot;&lt;/span&gt;);
    });

    &lt;span style="color:green;"&gt;// ESCREVE NA TELA TODOS AS PESSOAS ENCONTRADAS
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Busca pela Cidade&amp;quot;&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;-----------------&amp;quot;&lt;/span&gt;);
    &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Pessoa &lt;/span&gt;people &lt;span style="color:blue;"&gt;in &lt;/span&gt;umaLista) {
        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(people.Nome);
    }

    &lt;span style="color:green;"&gt;// ESPERA O USU&amp;Aacute;RIO DIGITAR [ENTER] PARA ENCERRAR O APLICATIVO
    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadKey();

}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nota-se pelos comentarios que o funcionamento &amp;eacute; bem simples. Assim que a lista &amp;eacute; criada, v&amp;aacute;rios objetos s&amp;atilde;o adicionados &amp;agrave; ela.&lt;br /&gt;Essa lista ser&amp;aacute; usada como source para as buscas. Assim que o source estiver completo, &amp;eacute; feita a primeira busca &lt;br /&gt;(pela propriedade ID). A segunda busca &amp;eacute; feita pela propriedade Cidade. O resultado final deve ser parecido com o da imagem abaixo. &lt;/p&gt;
&lt;p&gt;&lt;a rel="WLPP" href="https://oggura.bay.livefilestore.com/y1mLoxsynK9ROBp9pq3v4OK-H_XHKIbcO4aKVvkPn0YSOXckhmsCpDypXHVep97DN57bsdv4yM_huxzdO3bZIleqDYHPYFaEWELAiuZKOtYc4GZBWxa5Te23PGOWCf-aQvOeOvbphc9WxE/image[11].png"&gt;&lt;img border="0" width="265" src="https://oggura.bay.livefilestore.com/y1mrutRD-9LVqKaJ8mmNy-upkjPvTw2nzr_VF7m9XFQmMCkIKSktQ3ZMlNTsovqBygp9Z7lKFmC6EpHGjTOgUjy5ZgZo0GRFwLBOkWk_D7W8kQFEpAyiP-Q3EaBakeS0I-DInHpsG1LxHY/image_thumb[5].png" alt="image" height="239" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="image" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;Eacute; isso a&amp;iacute; pessoal, at&amp;eacute; a pr&amp;oacute;xima. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://buildbrasil.org/aggbug.aspx?PostID=31" width="1" height="1"&gt;</description></item></channel></rss>