<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.paulomorgado.net/~d/styles/itemcontent.css"?><rss xmlns:a10="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Paulo Morgado</title><link>http://paulomorgado.net/pt/</link><description>Aventuras em .NET, Engenharia de Software e Arquitectura de Software</description><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><a10:id>/Blogs/PT</a10:id><dc:language xmlns:dc="http://purl.org/dc/elements/1.1/">pt-PT</dc:language><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.paulomorgado.net/PauloMorgado/Blogs/PT" /><feedburner:info uri="paulomorgado/blogs/pt" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><image><link>http://paulomorgado.net/pt/</link><url>http://paulomorgado.net/images/profile/paulomorgado_100x100.png</url><title>Paulo Morgado</title></image><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:43352</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/G8UkFtZ9jzw/revista-programar-33-170-edi-231-227-o-fevereiro-de-2012.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Comunidade/default.aspx">Comunidade</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Revista+Programar/default.aspx">Revista Programar</category><title>Revista PROGRAMAR – 33ª Edição Fevereiro de 2012</title><description>&lt;h3 align="center"&gt;&lt;strong&gt;Revista PROGRAMAR&lt;/strong&gt;&lt;/h3&gt;  &lt;h4 align="center"&gt;Edição 33 – Fevereiro de 2012&lt;/h4&gt;  &lt;p align="center"&gt;&lt;a title="clica para download" href="http://www.portugal-a-programar.org/revista-programar/edicoes/download.php?e=33&amp;amp;t=forum" target="_blank"&gt;&lt;img alt="" src="http://www.portugal-a-programar.org/revista-programar/images/ed33.png" /&gt;&lt;/a&gt;&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Nesta edição, a &lt;a title="Revista PROGRAMAR" href="http://www.revista-programar.info/" target="_blank"&gt;revista Programar&lt;/a&gt; continua a premiar os autores dos três melhores artigos, dado o sucesso nas edições anteriores. E os leitores devem dar a sua opinião para que possamos premiar correctamente. Para isso vote em &lt;a href="http://tiny.cc/ProgramarED33_V"&gt;http://tiny.cc/ProgramarED33_V&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Assim nesta edição o artigo de capa é &lt;strong&gt;um artigo sobre Kinect Hack&lt;/strong&gt; para conhecer melhor algumas técnicas de programação para este novo dispositivo. Nesta 33ª edição podem ainda encontrar-se os seguintes artigos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Geração de Números Aleatórios – Parte 3&lt;/strong&gt; - O terceiro de 4 artigos do mesmo autor da excelente série “Programação em Lua”, desta vez sobre geração de números aleatórios.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Herança com JavaScript&lt;/strong&gt; - Saiba como usar a funcionalidade herança do paradigma da programação orientada por objetos na linguagem de programação JavaScript.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Programação Orientada aos Objectos em Pascal&lt;/strong&gt; - Pensa que o Pascal é uma linguagem apenas de aprendizagem e que parou no tempo? Então mude de ideias e veja como pode tirar partido do paradigma da programação orientada aos objetos nesta linguagem.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;VISUAL (NOT) BASIC -Iterators&lt;/strong&gt; - Saiba como pode utilizar iteradores na próxima versão da linguagem de programação Visual Basic (neste momento disponível em Developer Preview).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;CORE DUMP – Ambientes Produtivos&lt;/strong&gt; - Será que os ambientes produtivos disponibilizados pela gestão aos trabalhadores são os melhores? Conheça a opinião deste autor.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Enigmas de C#: Disposable Structs&lt;/strong&gt; - Mais um dos meus artigos sobre enigmas da linguagem de programação C#, desta vez envolvendo Disposable Structs.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;E ainda em colaboração com as comunidades &lt;strong&gt;&lt;a href="http://netponto.org/" target="_blank"&gt;NetPonto&lt;/a&gt;&lt;/strong&gt;, &lt;a href="http://www.eventbrite.com/org/855644879" target="_blank"&gt;AzurePT&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;a href="http://www.sharepointpt.org/" target="_blank"&gt;SharepointPT&lt;/a&gt;&lt;/strong&gt;, respectivamente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;BizTalk Server – Como funcionam os mapas&lt;/strong&gt; - Continuação do artigo sobre princípios básicos dos mapas publicado na edição anterior.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;SQL Azure Federations na prática&lt;/strong&gt; - Aprenda a implementar o padrão Sharding, que permite aumentar a escalabilidade de bases de dados de grandes dimensões.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Desenvolvimento em SharePoint 2010 – Parte 2&lt;/strong&gt; - Continuação do artigo anterior, desta vez saiba como desenvolver um sistema básico de logging.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a title="clica para download" href="http://www.portugal-a-programar.org/revista-programar/edicoes/download.php?e=33&amp;amp;t=forum" target="_blank"&gt;Mais informação&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=43352" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nB-Sz95X7zq3mA_itHOgVRVKA_E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nB-Sz95X7zq3mA_itHOgVRVKA_E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nB-Sz95X7zq3mA_itHOgVRVKA_E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nB-Sz95X7zq3mA_itHOgVRVKA_E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=G8UkFtZ9jzw:7evqBeF3NrY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=G8UkFtZ9jzw:7evqBeF3NrY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=G8UkFtZ9jzw:7evqBeF3NrY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=G8UkFtZ9jzw:7evqBeF3NrY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=G8UkFtZ9jzw:7evqBeF3NrY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=G8UkFtZ9jzw:7evqBeF3NrY:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=G8UkFtZ9jzw:7evqBeF3NrY:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/G8UkFtZ9jzw" height="1" width="1"/&gt;</description><pubDate>Fri, 03 Feb 2012 01:49:52 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=43352</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=43352</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2012/02/03/revista-programar-33-170-edi-231-227-o-fevereiro-de-2012.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2012/02/03/revista-programar-33-170-edi-231-227-o-fevereiro-de-2012.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:43323</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/VYBLcxe3eng/app-me-up-windows-phone.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/WindowsPhone/default.aspx">WindowsPhone</category><title>App Me Up | Windows Phone</title><description>&lt;p&gt;&lt;a title="App Me Up | Windows Phone" href="http://www.app-me-up.com/" target="_blank"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" src="http://www.app-me-up.com/img/slider_1.jpg" alt="" /&gt;&lt;/a&gt;&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Já está disponível o sítio da última iniciativa da &lt;a title="Microsoft Portugal" href="http://www.microsoft.com/portugal/" target="_blank"&gt;Microsoft Portugal&lt;/a&gt; para o lançamento do &lt;a title="Windows Phone" href="http://www.windowsphone.com/" target="_blank"&gt;Windows Phone&lt;/a&gt;: &lt;a title="App Me Up | Windows Phone" href="http://www.app-me-up.com/" target="_blank"&gt;App Me Up | Windows Phone&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Com esta iniciativa, a &lt;strong&gt;Microsoft Portugal&lt;/strong&gt; pretende contribuir para que &lt;a title="Portugal" href="http://wikipedia.org/wiki/Portugal" target="_blank"&gt;Portugal&lt;/a&gt; se torne um dos países de referência no desenvolvimento de aplicações para &lt;strong&gt;Windows Phone&lt;/strong&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=43323" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CnoklE-MqXLY2jxJseZzalvBbgo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CnoklE-MqXLY2jxJseZzalvBbgo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CnoklE-MqXLY2jxJseZzalvBbgo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CnoklE-MqXLY2jxJseZzalvBbgo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=VYBLcxe3eng:QB_aB7F-2mY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=VYBLcxe3eng:QB_aB7F-2mY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=VYBLcxe3eng:QB_aB7F-2mY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=VYBLcxe3eng:QB_aB7F-2mY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=VYBLcxe3eng:QB_aB7F-2mY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=VYBLcxe3eng:QB_aB7F-2mY:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=VYBLcxe3eng:QB_aB7F-2mY:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/VYBLcxe3eng" height="1" width="1"/&gt;</description><pubDate>Tue, 24 Jan 2012 22:56:12 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=43323</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=43323</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2012/01/24/app-me-up-windows-phone.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2012/01/24/app-me-up-windows-phone.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:43209</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/GeDfsy9l244/revista-programar-32-170-edi-231-227-o-dezembro-2011.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Comunidade/default.aspx">Comunidade</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Revista+Programar/default.aspx">Revista Programar</category><title>Revista PROGRAMAR – 32ª Edição Dezembro 2011</title><description>&lt;p align="center"&gt;&lt;a href="http://www.portugal-a-programar.org/revista-programar/edicoes/download.php?e=32&amp;amp;t=forum"&gt;&lt;img alt="" src="http://www.portugal-a-programar.org/revista-programar/images/ed32.jpg" /&gt;&lt;/a&gt;     &lt;br /&gt;(clica para download)&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Com o Natal por perto, a equipa de Revista PROGRAMAR traz-nos um presente de Natal, a edição de Dezembro recheada de óptimos artigos.&lt;/p&gt;  &lt;p align="justify"&gt;Nesta edição continuaremos também a premiar os autores dos três melhores artigos, dado o sucesso nas edições anteriores. E os leitores devem dar a sua opinião para que possamos premiar correctamente. Para isso vote em &lt;a title="Revista PROGRAMAR – 32ª Edição Dezembro 2011" href="http://tiny.cc/ProgramarED32_V" target="_blank"&gt;http://tiny.cc/ProgramarED32_V&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Esta edição traz-nos, como artigo de capa, um artigo sobre &lt;strong&gt;iOS, Cocoa Touch &amp;amp; MVC&lt;/strong&gt; para conhecer melhor algumas técnicas de programação para dispositivos móveis da Apple.&lt;/p&gt;  &lt;p align="justify"&gt;Nesta 32ª edição podemos ainda encontrar os seguintes artigos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Geração de Números Aleatórios – Parte 2&lt;/strong&gt;         &lt;br /&gt;O segundo de 4 artigos do mesmo autor da excelente série «Programação em Lua», desta vez sobre geração de números aleatórios. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Automatização de tarefas usando atributos&lt;/strong&gt;         &lt;br /&gt;Continuação do artigo sobre atributos em C# da edição número 30. Neste artigo, conheça melhor o funcionamento do conceito de contextos nesta linguagem. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;SQL Azure Fedarations&lt;/strong&gt;         &lt;br /&gt;Introdução às SQL Azure Federations. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Enigmas de C#: Arrays&lt;/strong&gt;         &lt;br /&gt;Saiba porque motivo, um &lt;em&gt;array&lt;/em&gt; pode provocar uma System.ArrayTypeMismatchException.        &lt;br /&gt;Espero que este pequeno artigo de minha autoria seja o primeiro de muitos acerca das peculiaridades do &lt;a title="Microsoft Visual C#" href="http://csharp.net/" target="_blank"&gt;C#&lt;/a&gt; que se apresentam como verdadeiros enigmas no nosso dia a dia.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;VISUAL (NOT) BASIC – Um pouco mais de Windows Phone 7&lt;/strong&gt;         &lt;br /&gt;Como pode tirar partido de algumas funcionalidades e características no desenvolvimento de aplicações para esta plataforma. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;CORE DUMP – Free as in Beer&lt;/strong&gt;         &lt;br /&gt;Atualmente, as empresas usam software open source, não por ser livre, mas por ser grátis. Conheça a opinião do autor sobre este tema.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;E ainda em colaboração com as comunidades &lt;strong&gt;AzurePt&lt;/strong&gt; e &lt;strong&gt;NetPonto&lt;/strong&gt;, respectivamente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Como suportar múltiplas identidades no seu WebSite com Windows Azure AppFabric ACS&lt;/strong&gt;         &lt;br /&gt;Saiba como resolver o problema das identidades em demasia através do Azure. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;BizTalk Server – Princípios Básicos dos Mapas&lt;/strong&gt;         &lt;br /&gt;Explore através deste artigo, o editor de mapas do BizTalk Server.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Desejos de &lt;strong&gt;Boas Festas&lt;/strong&gt; à equipa da Revista PROGRAMAR e a todos os leitores, redactores e membros da comunidades com as quais está relacionada.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=43209" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sol7v6LDesUFR1VSry7wxYIxYLg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sol7v6LDesUFR1VSry7wxYIxYLg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sol7v6LDesUFR1VSry7wxYIxYLg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sol7v6LDesUFR1VSry7wxYIxYLg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=GeDfsy9l244:XAXzTKUtbO0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=GeDfsy9l244:XAXzTKUtbO0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=GeDfsy9l244:XAXzTKUtbO0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=GeDfsy9l244:XAXzTKUtbO0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=GeDfsy9l244:XAXzTKUtbO0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=GeDfsy9l244:XAXzTKUtbO0:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=GeDfsy9l244:XAXzTKUtbO0:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/GeDfsy9l244" height="1" width="1"/&gt;</description><pubDate>Fri, 09 Dec 2011 23:54:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=43209</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=43209</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/12/09/revista-programar-32-170-edi-231-227-o-dezembro-2011.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/12/09/revista-programar-32-170-edi-231-227-o-dezembro-2011.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:43118</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/j4jqsCFpJ-4/becoming-a-kinect-hacker-innovator.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Kinect/default.aspx">Kinect</category><title>Becoming a Kinect (Hacker) Innovator</title><description>&lt;p align="justify"&gt;O &lt;b&gt;Jeff Sipko&lt;/b&gt;, da equipa &lt;i&gt;Kinect Hack and Share&lt;/i&gt; da &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;, que estará presente no &lt;a href="http://www.codebits.eu/"&gt;SAPO Codebits&lt;/a&gt; deste ano para falar do novo &lt;b&gt;Kinect SDK&lt;/b&gt;, conseguiu à última hora garantir a disponibilidade para estar em Portugal uns dias antes, e apresentar em exclusivo para a comunidade de Developers Microsoft uma sessão sobre o que podemos fazer com o Kinect SDK.&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Quem não quiser perder esta oportunidade pode inscrever-se &lt;a title="Becoming a Kinect (Hacker) Innovator" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032498874&amp;amp;Culture=pt-PT" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Mas, então, o que precisamos saber sobre esta sessão?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;Kinect motion sensor broke a Guiness record by being the fastest selling consumer electronics device ever !&amp;#160; Shortly after the device was launched, the community began creating solutions to enable them to connect the device to their computers and consume the sensor data for their own purposes.&amp;#160; We have seen some astounding innovation come from this—enhancing everything from games to robotics to surgery—and this is only the beginning!      &lt;br /&gt;This talk will give you some of the highlights of what people have been building with the system, and how they made it happen, then will show you how easy it is to use the tools to start creating your own amazing products with the system!&amp;#160; You are the visionary!&amp;#160; You are the controller!&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;O SDK e vários outros recursos podem ser obtidos no site &lt;a href="http://research.microsoft.com/kinectsdk"&gt;http://research.microsoft.com/kinectsdk&lt;/a&gt;. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=43118" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3M9tfYmMOq7IV7yscyYlF0ERw_Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3M9tfYmMOq7IV7yscyYlF0ERw_Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3M9tfYmMOq7IV7yscyYlF0ERw_Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3M9tfYmMOq7IV7yscyYlF0ERw_Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=j4jqsCFpJ-4:aVfhathafTo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=j4jqsCFpJ-4:aVfhathafTo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=j4jqsCFpJ-4:aVfhathafTo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=j4jqsCFpJ-4:aVfhathafTo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=j4jqsCFpJ-4:aVfhathafTo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=j4jqsCFpJ-4:aVfhathafTo:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=j4jqsCFpJ-4:aVfhathafTo:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/j4jqsCFpJ-4" height="1" width="1"/&gt;</description><pubDate>Thu, 03 Nov 2011 00:30:20 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=43118</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=43118</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/11/03/becoming-a-kinect-hacker-innovator.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/11/03/becoming-a-kinect-hacker-innovator.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:43058</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/rKpcqryb3EM/anunciando-a-ctp-do-microsoft-roslyn.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/VisualBasic/default.aspx">VisualBasic</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Roslyn/default.aspx">Roslyn</category><title>Anunciando A CTP Do Microsoft Roslyn</title><description>&lt;p align="justify"&gt;A equipa do Roslyn anunciou a disponibilidade geral do &lt;strong&gt;Roslyn CTP&lt;/strong&gt;!&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;O lançamento oficial pode ser encontrado em &lt;a href="http://msdn.com/roslyn" target="_blank"&gt;http://msdn.com/roslyn&lt;/a&gt;, assim como em algumas entradas de blogues (&lt;a href="http://blogs.msdn.com/b/somasegar/archive/2011/10/19/roslyn-ctp-available-now.aspx" target="_blank"&gt;soma&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/ericlippert/archive/2011/10/19/the-roslyn-preview-is-now-available.aspx" target="_blank"&gt;ericli&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx" target="_blank"&gt;vsteam&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/vbteam/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx" target="_blank"&gt;vbteam&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/csharpfaq/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx" target="_blank"&gt;c#faq&lt;/a&gt;) e pelo Twitter.&lt;/p&gt;  &lt;p align="justify"&gt;Este lançamento marca um passo significante no modo de pensar acerca dos compiladores, a agilidade tornada agora possível com inovação nas linguagens, ferramentas de IDE e potenciação do ecossistema. Os compiladores de &lt;strong&gt;C#&lt;/strong&gt; e &lt;strong&gt;VB&lt;/strong&gt; deixam de ser caixas pretas – algo para onde despejamos texto, opera alguma magia e despeja uma &lt;em&gt;assembly&lt;/em&gt; cá para fora. Toda a riqueza de informação acerca do código já não é deitada fora mas exposta como um modelo de objectos de total fidelidade que pode facilmente ser consumido por todos. Adicionalmente, foi lançada uma como antevisão da primeira janel interactiva de &lt;strong&gt;C#&lt;/strong&gt; que dispõe de todo o suporte do IDE – incluindo &lt;a title="IntelliSense" href="http://wikipedia.org/wiki/Intellisense" target="_blank"&gt;IntelliSense&lt;/a&gt; e detecção automática de directivas &lt;strong&gt;using&lt;/strong&gt; em falta.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Como começar:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Descarregar a &lt;a href="http://download.microsoft.com/download/F/4/7/F4700C93-A150-48D8-A62C-7D075E161F38/RoslynSetup.exe" target="_blank"&gt;CTP&lt;/a&gt;. A CTP é instalada sobre o Visual Studio 2010 SP1 e pode ser instalada com segurança lado-a-lado com o Visual Studio 11.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Ir a &lt;strong&gt;Start&lt;/strong&gt; -&amp;gt; &lt;strong&gt;All Programs&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Microsoft Codename Roslyn CTP&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Getting Started&lt;/strong&gt; para lançar o ponto de entrada para toda a documentação, exemplos e ferramentas.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Leiam o &lt;a href="http://download.microsoft.com/download/E/A/D/EADEC33E-FBA3-43BF-9226-427BDAC27610/Roslyn%20Project%20Overview.docx" target="_blank"&gt;Roslyn Project Overview&lt;/a&gt; para uma melhor visão do projecto.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Aprendam com os ricos exemplos incluído (colar como &lt;strong&gt;C#&lt;/strong&gt;/&lt;strong&gt;VB&lt;/strong&gt;, &lt;em&gt;refactorings&lt;/em&gt;, análise de código e ferramentas de geração de código).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Corram os &lt;a href="http://go.microsoft.com/fwlink/?LinkID=231190" target="_blank"&gt;walkthroughs&lt;/a&gt; para aprender as APIs do compilador, s APIs dos serviços usar a janela interactiva.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Qve extensões, pode descarregar a CTP ara experimentar a janela interactiva e usar as extensões Copiar Colar C#/VB que foram criadas para nos ajudar no trabalho diário!&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Esta distribuição inclui as seguintes funcionaliades:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;Visual Studio Project Templates&lt;/i&gt;         &lt;br /&gt;Estes modelos de projecto ajudam nos primeiro passos da utilizaão das APIs do Roslyn e a construir novas extensões para o &lt;a title="Visual Studio" href="http://www.microsoft.com/visualstudio/" target="_blank"&gt;Visual Studio&lt;/a&gt; usando as APIs do &lt;strong&gt;C#&lt;/strong&gt; ou &lt;strong&gt;VB&lt;/strong&gt;.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;Reference Assemblies&lt;/i&gt;         &lt;br /&gt;As &lt;em&gt;assemblies&lt;/em&gt; do Roslyn podem ser adicionadas aos projecto através da janela &lt;strong&gt;Add Reference&lt;/strong&gt;.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;Interactive Window&lt;/i&gt;         &lt;br /&gt;A nova janela chamada &lt;strong&gt;C# Interactive&lt;/strong&gt; está disponível no Visual Studio invocando &lt;strong&gt;View&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Other Windows&lt;/strong&gt; -&amp;gt; &lt;strong&gt;C# Interactive&lt;/strong&gt; a partir do menu. A partir daí podem-se experimentar quer executando pequenos pedaços de código quer construindo cumulativamente um contexto de execução à medida que se vai experimentando.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;Script File Editing Support&lt;/i&gt;         &lt;br /&gt;Os ficheiros C# Script (.csx) permitem instruções de alto nível como a janela &lt;strong&gt;C# Interactive&lt;/strong&gt;. Pode-se criar um novo ficheiro de C# Script invocando &lt;strong&gt;File &lt;/strong&gt;-&amp;gt; &lt;strong&gt;New File &lt;/strong&gt;-&amp;gt; &lt;strong&gt;Script &lt;/strong&gt;-&amp;gt; &lt;strong&gt;Visual C# Script&lt;/strong&gt; a partir do menu do Visual Studio. Adicionalmente a digitar o código directamente na janela, é possível seleccionar código em C# e ficheiros C# Script (.csx) e invocar &amp;quot;Execute in Interactive&amp;quot; ou &amp;quot;Copy to Interactive&amp;quot; a partir do menu de contexto. As funcionalidades de edição do C# Script, como o IntelliSense, são disponibilizadas usando o Roslyn Language Service.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Tenham em atenção de que isto é apenas uma &lt;strong&gt;antevisão da tecnologia&lt;/strong&gt; (&lt;b&gt;technology preview&lt;/b&gt;) e não produto final! O principal objectivo desta CTP é recolher testemunhos acerca das APIs públicas e permitir uma visão antecipada da janela Interactive. O formato das APIs está num estado razoavelmente estável, principalmente o as do compilador, mas ainda existem ainda algumas limitações conhecidas e apenas um conjunto das linguagens C# e Visual Basic estão implementadas na actual distribuição. Para a lista completa das funcionalidades não implementadas das linguagens, ver &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/roslyn/thread/f5adeaf0-49d0-42dc-861b-0f6ffd731825" target="_blank"&gt;aqui&lt;/a&gt;. A janela Interactive está disponível apenas em C# neste momento, mas o VB seguir-se-á em breve.&lt;/p&gt;  &lt;p align="justify"&gt;A equipa do Roslyn aguarda testemunhos nos &lt;a href="http://social.msdn.microsoft.com/forums/en-us/roslyn" target="_blank"&gt;foruns&lt;/a&gt; e &lt;a href="http://go.microsoft.com/fwlink/?LinkID=230759" target="_blank"&gt;Connect&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=43058" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kj13EAq8mGBl6jhf4B_Zcz_Ttmo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kj13EAq8mGBl6jhf4B_Zcz_Ttmo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kj13EAq8mGBl6jhf4B_Zcz_Ttmo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kj13EAq8mGBl6jhf4B_Zcz_Ttmo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=rKpcqryb3EM:zH5gPQihUfo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=rKpcqryb3EM:zH5gPQihUfo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=rKpcqryb3EM:zH5gPQihUfo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=rKpcqryb3EM:zH5gPQihUfo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=rKpcqryb3EM:zH5gPQihUfo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=rKpcqryb3EM:zH5gPQihUfo:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=rKpcqryb3EM:zH5gPQihUfo:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/rKpcqryb3EM" height="1" width="1"/&gt;</description><pubDate>Wed, 19 Oct 2011 23:56:13 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=43058</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=43058</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/10/20/anunciando-a-ctp-do-microsoft-roslyn.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/10/20/anunciando-a-ctp-do-microsoft-roslyn.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:43042</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/2SPItLPb4Uc/o-que-201-a-net-framework-4-5.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/async/default.aspx">async</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET4.5/default.aspx">.NET4.5</category><title>O Que É A .NET Framework 4.5?</title><description>&lt;p align="justify"&gt;De acordo com o &lt;a target="_blank" href="http://blogs.msdn.com/b/dotnet/" title=".NET Blog"&gt;.NET Blog&lt;/a&gt;, a &lt;strong&gt;.NET Framework 4.5&lt;/strong&gt; &amp;eacute; uma actualiza&amp;ccedil;&amp;atilde;o da &lt;strong&gt;.NET Framework 4.0&lt;/strong&gt; que a substitui (ao contr&amp;aacute;rio de uma instala&amp;ccedil;&amp;atilde;o lado-a-lado). TO objectivo &amp;eacute; a &lt;strong&gt;.NET 4.5&lt;/strong&gt; ser totalmente compat&amp;iacute;vel (&lt;a href="http://en.wikipedia.org/wiki/Backward_compatibility"&gt;backward compatible&lt;/a&gt;) com aplica&amp;ccedil;&amp;otilde;es feitas para &lt;strong&gt;.NET 4.0&lt;/strong&gt; (.NET 3.5 e .NET 4.5 estar&amp;atilde;o instaladas lado-a-lado).&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Uma das primeiras cosias que se nota acerca da &lt;strong&gt;.NET 4.5&lt;/strong&gt; &amp;eacute; que o n&amp;uacute;mero de vers&amp;atilde;o da &lt;a target="_blank" href="http://msdn.microsoft.com/library/8bs2ecf4.aspx" title="Common Language Runtime (CLR)"&gt;CLR&lt;/a&gt; (4.0.30319) &amp;eacute; o mesmo da &lt;strong&gt;.NET 4.0&lt;/strong&gt;; esta &amp;eacute; a pr&amp;aacute;ctica comum usada por outras actualiza&amp;ccedil;&amp;otilde;es. (&lt;a target="_blank" href="http://blogs.msdn.com/b/dotnet/archive/2011/09/26/compatibility-of-net-framework-4-5.aspx" title="Compatibility of .NET Framework 4.5"&gt;ler mais&lt;/a&gt;)&lt;/p&gt;
&lt;p align="justify"&gt;The facto, se se comparar um sistema com &lt;strong&gt;.NET 4.5&lt;/strong&gt; com um sistema com &lt;strong&gt;.NET 4.0&lt;/strong&gt; confirma-se que a 4.5 &amp;eacute; apenas uma actualiza&amp;ccedil;&amp;atilde;o &amp;agrave; 4.0:&lt;/p&gt;
&lt;table cellpadding="2" cellspacing="0" border="1"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th colspan="3" valign="top"&gt;Registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th valign="top"&gt;Value&lt;/th&gt;&lt;th valign="top"&gt;.NET 4.0 &lt;/th&gt;&lt;th valign="top"&gt;.NET 4.5 &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Version&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;4.0.30319&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;4.5.40805&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;CBS&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;1&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;TargetVersion&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;4.0.0&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;4.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Install&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;1&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Servicing&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;0&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Release&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;&lt;/td&gt;
&lt;td valign="top" style="text-align:right;"&gt;368485&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;InstallPath&lt;/td&gt;
&lt;td valign="top" style="text-align:left;"&gt;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\&lt;/td&gt;
&lt;td valign="top" style="text-align:left;"&gt;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p align="justify"&gt;Uma das principais adi&amp;ccedil;&amp;otilde;es &amp;agrave; plataforma &amp;eacute; o suporte para a &lt;a target="_blank" href="http://www.microsoft.com/download/en/details.aspx?id=19957" title="Task-based Asynchronous Pattern"&gt;Task-based Asynchronous Pattern&lt;/a&gt;. Todas as classes com APIs ass&amp;iacute;ncronas foram aumentadas para com uma API ass&amp;iacute;ncrona Task-based.&lt;/p&gt;
&lt;p align="justify"&gt;O tratamento de excep&amp;ccedil;&amp;otilde;es de tasks tamb&amp;eacute;m muda na .NET 4.5 para acomodar a nova palavra chave &lt;strong&gt;async&lt;/strong&gt; do &lt;a target="_blank" href="http://csharp.net/" title="Microsoft Visual C#"&gt;C#&lt;/a&gt; e VB. (&lt;a target="_blank" href="http://blogs.msdn.com/b/pfxteam/archive/2011/09/28/10217876.aspx" title="Task Exception Handling in .NET 4.5"&gt;ler mais&lt;/a&gt;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=43042" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cNU1wY1QsLkBn7be-3i5qkZMkV8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cNU1wY1QsLkBn7be-3i5qkZMkV8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cNU1wY1QsLkBn7be-3i5qkZMkV8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cNU1wY1QsLkBn7be-3i5qkZMkV8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=2SPItLPb4Uc:8Qr0iTwivZ4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=2SPItLPb4Uc:8Qr0iTwivZ4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=2SPItLPb4Uc:8Qr0iTwivZ4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=2SPItLPb4Uc:8Qr0iTwivZ4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=2SPItLPb4Uc:8Qr0iTwivZ4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=2SPItLPb4Uc:8Qr0iTwivZ4:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=2SPItLPb4Uc:8Qr0iTwivZ4:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/2SPItLPb4Uc" height="1" width="1"/&gt;</description><pubDate>Sun, 16 Oct 2011 23:56:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=43042</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=43042</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/10/17/o-que-201-a-net-framework-4-5.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/10/17/o-que-201-a-net-framework-4-5.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42985</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/_KPX-Qbrn1w/user-agent-strings-do-internet-explorer-10-no-windows-8-de-64bit.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/InternetExplorer/default.aspx">InternetExplorer</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Windows/default.aspx">Windows</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Windows8/default.aspx">Windows8</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/InternetExplorer10/default.aspx">InternetExplorer10</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/WinRT/default.aspx">WinRT</category><title>User Agent Strings Do Internet Explorer 10 No Windows 8 de 64bit</title><description>&lt;p align="justify"&gt;O &lt;a title="Internet Explorer" href="http://www.microsoft.com/windows/internet-explorer/" target="_blank"&gt;Internet Explorer&lt;/a&gt; 10 é o navegador web fornecido pela &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; com o &lt;a title="Microsoft Windows" href="http://www.microsoft.com/windows/" target="_blank"&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 8&lt;/strong&gt;.&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;De acordo com as suas diferentes utilizações, a sua &lt;a title="Understanding User-Agent Strings" href="http://msdn.microsoft.com/library/ms537503.aspx" target="_blank"&gt;user agent string&lt;/a&gt; é a seguinte:&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;th valign="top" width="160"&gt;Application&lt;/th&gt;        &lt;th valign="top" width="96"&gt;Environment&lt;/th&gt;        &lt;th valign="top" width="80"&gt;32/64 bit&lt;/th&gt;        &lt;th valign="top"&gt;User Agent String&lt;/th&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Internet Explorer&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Metro&lt;/td&gt;        &lt;td valign="top" align="center"&gt;-&lt;/td&gt;        &lt;td valign="top" align="left"&gt;Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Aplicação Javascript&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Metro&lt;/td&gt;        &lt;td valign="top" align="center"&gt;-&lt;/td&gt;        &lt;td valign="top" align="left"&gt;Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0;)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Aplicação C#/VB&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Metro&lt;/td&gt;        &lt;td valign="top" align="center"&gt;32bit&lt;/td&gt;        &lt;td valign="top" width="1039"&gt;Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Aplicação C#/VB&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Metro&lt;/td&gt;        &lt;td valign="top" align="center"&gt;64bit&lt;/td&gt;        &lt;td valign="top" width="1039"&gt;Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Internet Explorer&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Desktop&lt;/td&gt;        &lt;td valign="top" align="center"&gt;32bit&lt;/td&gt;        &lt;td valign="top" width="1039"&gt;         &lt;div align="left"&gt;Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)&lt;/div&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Internet Explorer&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Desktop&lt;/td&gt;        &lt;td valign="top" align="center"&gt;64bit&lt;sup&gt;&lt;font size="1"&gt;(1)&lt;/font&gt;&lt;/sup&gt;&lt;/td&gt;        &lt;td valign="top" width="1039"&gt;Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Aplicação WPF&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Desktop&lt;/td&gt;        &lt;td valign="top" align="center"&gt;32bit&lt;/td&gt;        &lt;td valign="top" width="1039"&gt;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Zune 4.7; InfoPath.3)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" align="left"&gt;Aplicação WPF&lt;/td&gt;        &lt;td valign="top" align="center"&gt;Desktop&lt;/td&gt;        &lt;td valign="top" align="center"&gt;64bit&lt;/td&gt;        &lt;td valign="top" width="1039"&gt;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/6.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Zune 4.7; InfoPath.3)&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div align="right"&gt;&lt;sup&gt;&lt;font size="1"&gt;(1)&lt;/font&gt;&lt;/sup&gt; Necessita ser habilitado para cada zona de segurança.&lt;/div&gt;  &lt;p align="justify"&gt;Analizando a tabela acima, concluo que:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Internet Explorer&lt;/strong&gt; &lt;strong&gt;Metro &lt;/strong&gt;é sempre uma aplicação de 64bit no &lt;strong&gt;Windows 8&lt;/strong&gt; 64bit.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Aplicações Metro Javascript&lt;/strong&gt; não anunciam se são de 32bit ou 64bit.&lt;/div&gt;      &lt;ol&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Aparentam estar a correr num &lt;strong&gt;Windows 8&lt;/strong&gt; de 32bit.&lt;/div&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Internet Explorer&lt;/strong&gt; &lt;strong&gt;Desktop &lt;/strong&gt;mantém o comportamento introduzido com o &lt;strong&gt;Internet Explorer 8&lt;/strong&gt;.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Aplicações C#/VB Metro &lt;/strong&gt;hospedando o &lt;em&gt;web browser&lt;/em&gt; (&lt;a title="WebView Control" href="http://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.webview.aspx" target="_blank"&gt;WebView control&lt;/a&gt;) exibem o mesmo comportamento que o &lt;strong&gt;Internet Explorer&lt;/strong&gt;.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Aplicações &lt;/strong&gt;&lt;strong&gt;Desktop &lt;/strong&gt;&lt;strong&gt;WPF&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;hospedando o &lt;em&gt;web browser&lt;/em&gt; (&lt;a title="WebBrowser Control" href="http://msdn.microsoft.com/library/system.windows.controls.webbrowser.aspx" target="_blank"&gt;WebBrowser control&lt;/a&gt;) mantém o comportamento introduzido com o &lt;strong&gt;Internet Explorer 8&lt;/strong&gt;.&lt;/div&gt;      &lt;ol&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Este comportamento pode ser sobreposto &lt;a title="Defining Document Compatibility" href="http://msdn.microsoft.com/library/cc288325.aspx" target="_blank"&gt;definindo o modo de compatibilidade do documento no servidor&lt;/a&gt; ou &lt;a title="Internet Feature Controls (B..C) - Browser Emulation" href="http://msdn.microsoft.com/library/ee330730.aspx#browser_emulation" target="_blank"&gt;definindo o modo de emulação do navegador no cliente&lt;/a&gt;.&lt;/div&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42985" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iBQP8nbPKMPM6WDxy9MuH3zetTg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iBQP8nbPKMPM6WDxy9MuH3zetTg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iBQP8nbPKMPM6WDxy9MuH3zetTg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iBQP8nbPKMPM6WDxy9MuH3zetTg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=_KPX-Qbrn1w:Uqk-nKmtWvM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=_KPX-Qbrn1w:Uqk-nKmtWvM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=_KPX-Qbrn1w:Uqk-nKmtWvM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=_KPX-Qbrn1w:Uqk-nKmtWvM:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=_KPX-Qbrn1w:Uqk-nKmtWvM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=_KPX-Qbrn1w:Uqk-nKmtWvM:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=_KPX-Qbrn1w:Uqk-nKmtWvM:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/_KPX-Qbrn1w" height="1" width="1"/&gt;</description><pubDate>Mon, 10 Oct 2011 23:15:43 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42985</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42985</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/10/11/user-agent-strings-do-internet-explorer-10-no-windows-8-de-64bit.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/10/11/user-agent-strings-do-internet-explorer-10-no-windows-8-de-64bit.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42668</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/QThB6wwGlBc/keynotes-da-build-online-e-em-directo.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Windows/default.aspx">Windows</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Windows8/default.aspx">Windows8</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/BuildWindows/default.aspx">BuildWindows</category><title>Keynotes da BUILD | Online e em directo</title><description>&lt;p align="justify"&gt;A &lt;a href="http://www.buildwindows.com/" target="_blank"&gt;BUILD&lt;/a&gt;, a conferência onde se espera que a &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; apresente as primeiras novidades sobre o &lt;a title="Microsoft Windows" href="http://www.microsoft.com/windows/" target="_blank"&gt;Windows&lt;/a&gt; 8, para Developers, está prestes a iniciar. A boa notícia é que &lt;b&gt;as Keynotes estarão disponíveis &lt;i&gt;online&lt;/i&gt; e em directo&lt;/b&gt; no site &lt;a href="http://www.buildwindows.com" target="_blank"&gt;www.buildwindows.com&lt;/a&gt;!&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;O &lt;a href="http://channel9.msdn.com/" target="_blank"&gt;Channel9&lt;/a&gt; também vai ter uma cobertura muito extensa da conferência, entre sessões disponíveis online, entrevistas, painéis de discussão, etc. (mais novidades aqui: &lt;a href="http://news.cnet.com/8301-10805_3-20103036-75/behind-the-scenes-at-microsofts-channel-9/" target="_blank"&gt;http://news.cnet.com/8301-10805_3-20103036-75/behind-the-scenes-at-microsofts-channel-9/&lt;/a&gt;) &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42668" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UYbB97iP5xtM5ZS81cnAsZnUhPI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UYbB97iP5xtM5ZS81cnAsZnUhPI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UYbB97iP5xtM5ZS81cnAsZnUhPI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UYbB97iP5xtM5ZS81cnAsZnUhPI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=QThB6wwGlBc:dShDJd9MUy0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=QThB6wwGlBc:dShDJd9MUy0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=QThB6wwGlBc:dShDJd9MUy0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=QThB6wwGlBc:dShDJd9MUy0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=QThB6wwGlBc:dShDJd9MUy0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=QThB6wwGlBc:dShDJd9MUy0:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=QThB6wwGlBc:dShDJd9MUy0:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/QThB6wwGlBc" height="1" width="1"/&gt;</description><pubDate>Tue, 13 Sep 2011 00:50:43 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42668</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42668</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/09/13/keynotes-da-build-online-e-em-directo.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/09/13/keynotes-da-build-online-e-em-directo.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42580</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/P9aZWw2sQhw/limpado-html-com-express-245-es-regulares.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/HTML/default.aspx">HTML</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Regex/default.aspx">Regex</category><title>Limpado HTML Com Expressões Regulares</title><description>&lt;p align="justify"&gt;Ao participar numa discussão de um fórum, ocorreu a necessidade de limpar &lt;strong&gt;HTML&lt;/strong&gt; de fragmentos &amp;quot;perigosos&amp;quot;.&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;No caso presente, era necessário remover os elementos &lt;strong&gt;SCRIPT&lt;/strong&gt;, &lt;strong&gt;OBJECT&lt;/strong&gt;, &lt;strong&gt;APPLET&lt;/strong&gt;, &lt;strong&gt;EMBBED&lt;/strong&gt;, &lt;strong&gt;FRAMESET&lt;/strong&gt;, &lt;strong&gt;IFRAME&lt;/strong&gt;, &lt;strong&gt;FORM&lt;/strong&gt;, &lt;strong&gt;INPUT&lt;/strong&gt;, &lt;strong&gt;BUTTON&lt;/strong&gt; e &lt;strong&gt;TEXTAREA&lt;/strong&gt; (tanto quanto me consiga ocorrer) do &lt;strong&gt;HTML&lt;/strong&gt; fonte. Todos os atributos relativos a eventos (&lt;strong&gt;ON&lt;em&gt;EVENT&lt;/em&gt;&lt;/strong&gt;) deveriam ser removidos mantendo, no entanto, os restantes.&lt;/p&gt;  &lt;p align="justify"&gt;O &lt;strong&gt;HTML&lt;/strong&gt; é muito pouco rigoroso e difícil de interpretar. Os elementos podem ser definidos por uma etiqueta (&lt;em&gt;tag&lt;/em&gt;) inicial (&lt;strong&gt;&amp;lt;&lt;em&gt;nome-do-elemento&lt;/em&gt;&amp;gt;&lt;/strong&gt;) e uma etiqueta final (&lt;strong&gt;&amp;lt;/&lt;em&gt;nome-do-elemento&lt;/em&gt;&amp;gt;&lt;/strong&gt;) existindo, no entanto, alguns elementos que não requerem etiqueta final. Se estiver a ser interpretado &lt;strong&gt;XHTML&lt;/strong&gt;, elementos sem a etiqueta final requerem que a etiqueta seja terminada com &lt;strong&gt;/&amp;gt;&lt;/strong&gt; em vez de apenas &lt;strong&gt;&amp;gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Os atributos não são mais fáceis de interpretar. Por definição, os valores dos atributos requerem que sejam delimitados por plicas (&lt;strong&gt;&amp;#39;&lt;/strong&gt;) ou aspas (&lt;strong&gt;&amp;quot;&lt;/strong&gt;), mas alguns navegadores aceitam valores sem qualquer delimitador.&lt;/p&gt;  &lt;p align="justify"&gt;Poderíamos construir um interpretador (&lt;em&gt;parser&lt;/em&gt;), mas isso tornaria demasiado custoso adicionar ou remover elementos ou atributos. Usar uma &lt;a title="Regular expression - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Regular_expression" rel="nofollow" target="_blank"&gt;expressão regular&lt;/a&gt; para remover os elementos e atributos indesejados para ser a melhor opção.&lt;/p&gt;  &lt;p align="justify"&gt;Comecemos por capturar os elementos definidos com etiqueta inicial e etiqueta final. Para tal, temos de:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;Capturar o carácter de início de etiqueta seguido do inicial seguido do nome do elemento (que memorizaremos – &lt;strong&gt;t&lt;/strong&gt;): &lt;strong&gt;&amp;lt;(?&amp;lt;t&amp;gt;&lt;em&gt;nome-do-elemento&lt;/em&gt;)&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;Capturar opcionalmente espaços iniciais seguidos de qualquer carácter: &lt;strong&gt;(\s+.*?)?&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;Capturar o carácter de fim de etiqueta: &lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;Capturar opcionalmente qualquer carácter: &lt;strong&gt;.*?&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;Capturar o carácter de início de etiqueta seguido do carácter de etiqueta final, o nome do elemento (referenciado pelo nome com que foi memorizado - &lt;strong&gt;t&lt;/strong&gt;) e o carácter de fim de etiqueta: &lt;strong&gt;&amp;lt;/\k&amp;lt;t&amp;gt;&amp;gt;&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="code"&gt;&amp;lt;?&amp;lt;t&amp;gt;&lt;em&gt;nome-do-elemento&lt;/em&gt;(\s+.*?)?&amp;gt;.*?&amp;lt;/\k&amp;lt;t&amp;gt;&amp;gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Para capturar todos os elementos indesejados, chegamos à seguinte expressão regular:&lt;/p&gt;

&lt;pre class="code"&gt;&amp;lt;(?&amp;lt;t&amp;gt;script|object|applet|embbed|frameset|iframe|form|textarea)(\s+.*?)?&amp;gt;.*?&amp;lt;/\k&amp;lt;t&amp;gt;&amp;gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Em seguida, capturemos os elementos sem etiqueta final. Para tal, temos de:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="left"&gt;Capturar o carácter de início de etiqueta seguido do inicial seguido do nome do elemento: &lt;strong&gt;&amp;lt;&lt;em&gt;nome-do-elemento&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="left"&gt;Capturar opcionalmente espaços iniciais seguidos de qualquer carácter: &lt;strong&gt;(\s+.*?)?&lt;/strong&gt;&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="left"&gt;Capturar o carácter de etiqueta final opcional: &lt;strong&gt;/?&lt;/strong&gt;&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="left"&gt;Capturar o carácter de fim de etiqueta: &lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="code"&gt;&amp;lt;&lt;em&gt;nome-do-elemento&lt;/em&gt;(\s+.*?)?/?&amp;gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Para capturar todos os elementos indesejados, chegamos à seguinte expressão regular:&lt;/p&gt;

&lt;pre class="code"&gt;&amp;lt;(script|object|applet|embbed|frameset|iframe|form|textarea|input|button)(\s+.*?)?/?&amp;gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Para remover todos estes elementos indesejáveis do &lt;strong&gt;HTML&lt;/strong&gt; fonte, podemos combinar as duas expressões regulares anteriores numa só e substituir todas as capturas por texto vazio:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;&lt;font color="#a5a5a5"&gt;Regex&lt;/font&gt;.Replace(
    sourceHtml,
    &lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;|(&amp;lt;(?&amp;lt;t&amp;gt;script|object|applet|embbed|frameset|iframe|form|textarea)(\\s+.*?)?&amp;gt;.*?&amp;lt;/\\k&amp;lt;t&amp;gt;&amp;gt;)&amp;quot;
        &lt;/span&gt;&lt;span style="color:black;"&gt;+ &lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;|(&amp;lt;(script|object|applet|embbed|frameset|iframe|form|input|button|textarea)(&lt;a&gt;\\s+.*?)?/?&amp;gt;)&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;,
&lt;/a&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;.Empty);&lt;/span&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Finalmente, os atributos indesejáveis. Esta operação é um pouco mais complicada porque queremos capturar os atributos indesejáveis dentro da definição de elementos. Para o conseguir, temos de procurar uma combinação que corresponda à etiqueta inicial de um elemento e capturar a definição dos atributos. Para tal, temos de:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="justify"&gt;Encontrar mas ignorar o carácter de início de etiqueta seguido de qualquer nome do elemento: &lt;strong&gt;(?&amp;lt;=&amp;lt;\w+)&lt;/strong&gt;&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Encontrar todos:&lt;/div&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;div align="justify"&gt;Não capturar espaços: &lt;strong&gt;(?:\s+)&lt;/strong&gt;&lt;/div&gt;
      &lt;/li&gt;

      &lt;li&gt;
        &lt;div align="justify"&gt;Capturar definição de atributo:&lt;/div&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;div align="justify"&gt;Capturar nome de atributo: &lt;strong&gt;\w+&lt;/strong&gt;&lt;/div&gt;
          &lt;/li&gt;

          &lt;li&gt;
            &lt;div align="justify"&gt;Capturar sinal de igualdade:&lt;strong&gt; =&lt;/strong&gt;&lt;/div&gt;
          &lt;/li&gt;

          &lt;li&gt;
            &lt;div align="justify"&gt;Capturar o valor numa das formas:&lt;/div&gt;

            &lt;ul&gt;
              &lt;li&gt;
                &lt;div align="justify"&gt;Capturar valor delimitado por aspas: &lt;strong&gt;&amp;quot;[^&amp;quot;]*&amp;quot;&lt;/strong&gt;&lt;/div&gt;
              &lt;/li&gt;

              &lt;li&gt;
                &lt;div align="justify"&gt;Capturar valor delimitado por plicas: &lt;strong&gt;&amp;#39;[^&amp;#39;]*&amp;#39;&lt;/strong&gt;&lt;/div&gt;
              &lt;/li&gt;

              &lt;li&gt;
                &lt;div align="justify"&gt;Capturar valor não delimitado: &lt;strong&gt;.*?&lt;/strong&gt;&lt;/div&gt;
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Encontrar mas ignorar fim de etiqueta: &lt;strong&gt;(?=/?&amp;gt;)&lt;/strong&gt;&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="code"&gt;(?&amp;lt;=&amp;lt;\w+)((?:\s+)(\w+=((&amp;quot;[^&amp;quot;]*&amp;quot;)|(&amp;#39;[^&amp;#39;]*&amp;#39;)|(.*?)))*(?=/?&amp;gt;)&lt;/pre&gt;

&lt;p align="justify"&gt;O problema da expressão regular anterior é que corresponde e captura todos os atributos em conjunto e não cada atributo indesejado individualmente. Isto impede-nos de substituir a captura por um texto fixo (texto vazio).&lt;/p&gt;

&lt;p align="justify"&gt;Para solucionar isto, temos de dar um nome aos atributos que queremos capturar e usar o método &lt;strong&gt;&lt;a title="Regex.Replace Method (System.Text.RegularExpressions)" href="http://msdn.microsoft.com/library/system.text.regularexpressions.regex.replace.aspx" rel="nofollow" target="_blank"&gt;Replace&lt;/a&gt;&lt;/strong&gt; que usa um avaliador de correspondências - &lt;strong&gt;&lt;a title="MatchEvaluator Delegate (System.Text.RegularExpressions)" href="http://msdn.microsoft.com/library/system.text.regularexpressions.matchevaluator.aspx" rel="nofollow" target="_blank"&gt;MatchEvaluator&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p align="justify"&gt;Poderíamos capturar os elementos indesejados com fizemos para os elementos, mas teríamos de os remover da lista de todos os atributos do elemento. Em vez disso, iremos capturar os atributos desejados e construir a lista de atributos. Para identificar quais os atributos desejados teremos de lhes dar um nome (&lt;strong&gt;a&lt;/strong&gt;). O código resultante será algo deste género:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;&lt;font color="#a5a5a5"&gt;Regex&lt;/font&gt;.Replace(
    sourceHtml,
    &lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;((?&amp;lt;=&amp;lt;\\w+)((?:\\s+)((?:on\\w+=((\&amp;quot;[^\&amp;quot;]*\&amp;quot;)|(&amp;#39;[^&amp;#39;]*&amp;#39;)|(.*?)))|(?&amp;lt;a&amp;gt;(?!on)\\w+=((\&amp;quot;[^\&amp;quot;]*\&amp;quot;)|(&amp;#39;[^&amp;#39;]*&amp;#39;)|(.*?)))))*(?=/?&amp;gt;))&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;,
    match =&amp;gt;
    {
        &lt;/span&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;&lt;span style="color:black;"&gt;(!match.Groups[&lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;].Success)
        {
            &lt;/span&gt;&lt;span style="color:blue;"&gt;return string&lt;/span&gt;&lt;span style="color:black;"&gt;.Empty;
        }
        
        &lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;&lt;span style="color:black;"&gt;attributesBuilder = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;font color="#a5a5a5"&gt;StringBuilder&lt;/font&gt;();
        
        &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;font color="#a5a5a5"&gt;Capture&lt;/font&gt; capture &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:black;"&gt;match.Groups[&lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;].Captures)
        {
            attributesBuilder.Append(&lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style="color:black;"&gt;);
            attributesBuilder.Append(capture.Value);
        }
        
        &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:black;"&gt;attributesBuilder.ToString();
    }
);
&lt;/span&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Para evitar interpretar o &lt;strong&gt;HTML&lt;/strong&gt; fonte mais de uma vez, podemos combinar todos as expressões regulares numa só.&lt;/p&gt;

&lt;p align="justify"&gt;Porque apenas iremos retornar os atributo desejados, não há qualquer alteração a fazer ao avaliador de correspondências.&lt;/p&gt;

&lt;p align="justify"&gt;Acrescentemos ainda algumas opções (&lt;strong&gt;&lt;a title="RegexOptions Enumeration (System.Text.RegularExpressions)" href="http://msdn.microsoft.com/library/system.text.regularexpressions.regexoptions.aspx" rel="nofollow" target="_blank"&gt;RegexOptions&lt;/a&gt;&lt;/strong&gt;) para acrescentar funcionalidade e performance:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;IgnoreCase&lt;/strong&gt;: Para corresponder maiúsculas e minúsculas. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;CultureInvariant&lt;/strong&gt;: Para ignorar diferenças culturais de linguagem. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Multiline&lt;/strong&gt;: Para modo multi-linha. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ExplicitCapture&lt;/strong&gt;: Para capturar apenas capturas com nome. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Compiled&lt;/strong&gt;: Para compilar a expressão regular para uma &lt;em&gt;assembly&lt;/em&gt;. Apenas se a expressão regular for usada muitas vezes. &lt;/li&gt;
&lt;/ul&gt;

&lt;p align="justify"&gt;The resulting code will be this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;&lt;font color="#a5a5a5"&gt;Regex&lt;/font&gt;.Replace(
    sourceHtml,
    &lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;(&amp;lt;(?&amp;lt;t&amp;gt;script|object|applet|embbed|frameset|iframe|form|textarea)(\\s+.*?)?&amp;gt;.*?&amp;lt;/\\k&amp;lt;t&amp;gt;&amp;gt;)&amp;quot;
        &lt;/span&gt;&lt;span style="color:black;"&gt;+ &lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;|(&amp;lt;(script|object|applet|embbed|frameset|iframe|form|input|button|textarea)(\\s+.*?)?/?&amp;gt;)&amp;quot;
        &lt;/span&gt;&lt;span style="color:black;"&gt;+ &lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;|((?&amp;lt;=&amp;lt;\\w+)((?:\\s+)((?:on\\w+=((\&amp;quot;[^\&amp;quot;]*\&amp;quot;)|(&amp;#39;[^&amp;#39;]*&amp;#39;)|(.*?)))|(?&amp;lt;a&amp;gt;(?!on)\\w+=((\&amp;quot;[^\&amp;quot;]*\&amp;quot;)|(&amp;#39;[^&amp;#39;]*&amp;#39;)|(.*?)))))*(?=/?&amp;gt;))&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;,
    match =&amp;gt;
    {
        &lt;/span&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;&lt;span style="color:black;"&gt;(!match.Groups[&lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;].Success)
        {
            &lt;/span&gt;&lt;span style="color:blue;"&gt;return string&lt;/span&gt;&lt;span style="color:black;"&gt;.Empty;
        }
        
        &lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;&lt;span style="color:black;"&gt;attributesBuilder = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;font color="#a5a5a5"&gt;StringBuilder&lt;/font&gt;();
        
        &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;font color="#a5a5a5"&gt;Capture&lt;/font&gt; capture &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:black;"&gt;match.Groups[&lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;].Captures)
        {
            attributesBuilder.Append(&lt;/span&gt;&lt;span style="color:#dc1414;"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style="color:black;"&gt;);
            attributesBuilder.Append(capture.Value);
        }
        
        &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:black;"&gt;attributesBuilder.ToString();
    },
    &lt;font color="#a5a5a5"&gt;RegexOptions&lt;/font&gt;.IgnoreCase
        | &lt;font color="#a5a5a5"&gt;RegexOptions&lt;/font&gt;.CultureInvariant
        | &lt;font color="#a5a5a5"&gt;RegexOptions&lt;/font&gt;.Multiline
        | &lt;font color="#a5a5a5"&gt;RegexOptions&lt;/font&gt;.ExplicitCapture
        | &lt;font color="#a5a5a5"&gt;RegexOptions&lt;/font&gt;.Compiled
);
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Isto não foi extensivamente testado e pode ocorrer que algum &lt;strong&gt;HTML&lt;/strong&gt; desejado seja removido e algum &lt;strong&gt;HTML&lt;/strong&gt; indesejado sejam mantido, mas deve estar próximo de uma boa solução.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42580" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lOGY_JLS28Rl3pDNpdi4lrmutlA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lOGY_JLS28Rl3pDNpdi4lrmutlA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lOGY_JLS28Rl3pDNpdi4lrmutlA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lOGY_JLS28Rl3pDNpdi4lrmutlA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=P9aZWw2sQhw:2J7JpT1rvxw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=P9aZWw2sQhw:2J7JpT1rvxw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=P9aZWw2sQhw:2J7JpT1rvxw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=P9aZWw2sQhw:2J7JpT1rvxw:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=P9aZWw2sQhw:2J7JpT1rvxw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=P9aZWw2sQhw:2J7JpT1rvxw:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=P9aZWw2sQhw:2J7JpT1rvxw:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/P9aZWw2sQhw" height="1" width="1"/&gt;</description><pubDate>Mon, 05 Sep 2011 03:57:07 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42580</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42580</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/09/05/limpado-html-com-express-245-es-regulares.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/09/05/limpado-html-com-express-245-es-regulares.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42404</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/ac4ahBpaBsg/conte-250-dos-do-microsoft-summer-tech-refresh.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Comunidade/default.aspx">Comunidade</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><title>Conteúdos do Microsoft Summer Tech Refresh</title><description>&lt;p align="justify"&gt;No passado dia 10 de Agosto teve lugar no auditório da &lt;a title="Microsoft Portugal" href="http://www.microsoft.com/portugal/" target="_blank"&gt;Microsoft Portugal&lt;/a&gt; o &lt;strong&gt;Microsoft Summer Tech Refresh&lt;/strong&gt;.&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;O evento abriu com um agradável convívio no exterior com comes e bebes a que se seguiu uma série de apresentações sobre a construção de uma aplicação usando diferentes tecnologias e serviços &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;. Um evento a repetir.&lt;/p&gt;  &lt;p align="justify"&gt;Todos os conteúdos do evento estão disponíveis &lt;a href="https://skydrive.live.com/?cid=21b19b6a98d96248#!/?cid=21b19b6a98d96248&amp;amp;sc=documents&amp;amp;id=21B19B6A98D96248%21196!cid=21B19B6A98D96248&amp;amp;id=21B19B6A98D96248%21196&amp;amp;sc=documents"&gt;nesta pasta de SkyDrive&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42404" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZBS9SVsIGl9vwCyzH5wmuAgBDE4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZBS9SVsIGl9vwCyzH5wmuAgBDE4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZBS9SVsIGl9vwCyzH5wmuAgBDE4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZBS9SVsIGl9vwCyzH5wmuAgBDE4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ac4ahBpaBsg:-CYZSzfiaxk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ac4ahBpaBsg:-CYZSzfiaxk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ac4ahBpaBsg:-CYZSzfiaxk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ac4ahBpaBsg:-CYZSzfiaxk:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ac4ahBpaBsg:-CYZSzfiaxk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ac4ahBpaBsg:-CYZSzfiaxk:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ac4ahBpaBsg:-CYZSzfiaxk:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/ac4ahBpaBsg" height="1" width="1"/&gt;</description><pubDate>Fri, 12 Aug 2011 13:59:46 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42404</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42404</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/08/12/conte-250-dos-do-microsoft-summer-tech-refresh.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/08/12/conte-250-dos-do-microsoft-summer-tech-refresh.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42142</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/ZYE9pfio3tk/o-novo-msdn-forums-assistant.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><title>O Novo MSDN Forums Assistant</title><description>&lt;p align="justify"&gt;A &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; lançou o &lt;strong&gt;MSDN Forum Assistant&lt;/strong&gt;, que permite acesso aos foruns &lt;strong&gt;MSDN &lt;/strong&gt;e receber actualizações directamente no seu ambiente de trabalho. A funcionalidades incluem &lt;strong&gt;Ask a Question&lt;/strong&gt;, &lt;strong&gt;Latest Post&lt;/strong&gt;, &lt;strong&gt;Thread Updates&lt;/strong&gt;, &lt;strong&gt;Priority Support&lt;/strong&gt;, e &lt;strong&gt;Forum Q&amp;amp;A&lt;/strong&gt;. O &lt;strong&gt;MSDN Forum Assistant&lt;/strong&gt; pode ser descarregado daqui: &lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=822a3787-89e8-4c6d-8fc4-a413437d86e9" target="_blank"&gt;http://gallery.live.com/liveItemDetail.aspx?li=822a3787-89e8-4c6d-8fc4-a413437d86e9&lt;/a&gt;&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Mais informação pode ser encontrada aqui:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MSDN Forum Assistant Web Site: &lt;a href="http://msdn.microsoft.com/en-sg/gg650455" target="_blank"&gt;http://msdn.microsoft.com/en-sg/gg650455&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Video Overview: &lt;a href="http://www.youtube.com/watch?v=JYrNemrjQc8" target="_blank"&gt;http://www.youtube.com/watch?v=JYrNemrjQc8&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42142" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RklGJijimrnWC9ZaEFO-_G86ibU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RklGJijimrnWC9ZaEFO-_G86ibU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RklGJijimrnWC9ZaEFO-_G86ibU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RklGJijimrnWC9ZaEFO-_G86ibU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ZYE9pfio3tk:1F9kJKK9rB4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ZYE9pfio3tk:1F9kJKK9rB4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ZYE9pfio3tk:1F9kJKK9rB4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ZYE9pfio3tk:1F9kJKK9rB4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ZYE9pfio3tk:1F9kJKK9rB4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=ZYE9pfio3tk:1F9kJKK9rB4:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=ZYE9pfio3tk:1F9kJKK9rB4:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/ZYE9pfio3tk" height="1" width="1"/&gt;</description><pubDate>Mon, 18 Jul 2011 00:21:41 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42142</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42142</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/07/18/o-novo-msdn-forums-assistant.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/07/18/o-novo-msdn-forums-assistant.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42141</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/1qUVJZZ5QvY/visual-studio-uservoice-site.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><title>Visual Studio UserVoice Site</title><description>&lt;p align="justify"&gt;Foi criado um sítio &lt;a title="UserVoice - Customer Feedback and Helpdesk Solutions" href="http://uservoice.com/" target="_blank"&gt;UserVoice&lt;/a&gt; para recolher pedidos e opiniões da comunidade acerca do &lt;a title="Visual Studio" href="http://www.microsoft.com/visualstudio/" target="_blank"&gt;Visual Studio&lt;/a&gt;:&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a title="http://visualstudio.uservoice.com/" href="http://visualstudio.uservoice.com/"&gt;http://visualstudio.uservoice.com/&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Para reportar problemas, o sítio Visual Studio Connect continua a ser o local indicado:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a title="visualstudio" href="http://connect.microsoft.com/visualstudio"&gt;http://connect.microsoft.com/visualstudio&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42141" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kjTlvctSduuxnrE68M4sD4PqLPk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kjTlvctSduuxnrE68M4sD4PqLPk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kjTlvctSduuxnrE68M4sD4PqLPk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kjTlvctSduuxnrE68M4sD4PqLPk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=1qUVJZZ5QvY:rUVJiXzhYm8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=1qUVJZZ5QvY:rUVJiXzhYm8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=1qUVJZZ5QvY:rUVJiXzhYm8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=1qUVJZZ5QvY:rUVJiXzhYm8:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=1qUVJZZ5QvY:rUVJiXzhYm8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=1qUVJZZ5QvY:rUVJiXzhYm8:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=1qUVJZZ5QvY:rUVJiXzhYm8:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/1qUVJZZ5QvY" height="1" width="1"/&gt;</description><pubDate>Sun, 17 Jul 2011 23:42:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42141</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42141</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/07/18/visual-studio-uservoice-site.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/07/18/visual-studio-uservoice-site.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:42139</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/Q88oLlCc5Uo/guid-generator-my-first-windows-phone-application-is-available-on-the-marketplace.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/WindowsPhone/default.aspx">WindowsPhone</category><title>GUID Generator: My first Windows Phone application is available on the marketplace</title><description>&lt;p align="justify"&gt;Para poder completar o registo para poder desenvolver para o &lt;a title="Windows Phone" href="http://www.microsoft.com/windowsphone/" target="_blank"&gt;Windows Phone&lt;/a&gt; é necessário submeter uma aplicação.&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Seguindo o conselho do &lt;a title="Caio Proiete" href="http://caioproiete.com/" target="_blank"&gt;Caio&lt;/a&gt;, criei um gerador de GUIDs - &lt;strong&gt;GUID Generator&lt;/strong&gt;. Já foi publicado e pode ser obtido &lt;a title="Paulo Morgado&amp;#39;s GUID Generator application for Windows Phone" href="http://windowsphone.com/s?appid=a8551bc8-a6ad-e011-a53c-78e7d1fa76f8" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="justify"&gt;Alguma vez sentiram a necessidade de um GUID fresquinho?&lt;/p&gt;    &lt;p align="justify"&gt;Com esta aplicação pode ter o seu GUID gerado de fresco quando quiser.&lt;/p&gt;    &lt;p align="justify"&gt;Um GUID (Globally Unique Identifier) é um número inteiro de 128 &lt;em&gt;bits&lt;/em&gt; (16 &lt;em&gt;bytes&lt;/em&gt;) que pode ser usado em de todos os computadores e redes sempre que um identificador único for requerido. Tal identificador tem uma probabilidade muito reduzida de ser duplicado. Alguém quer tentar?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;Falando com amigos com telefones &lt;strong&gt;iPhone&lt;/strong&gt; e &lt;strong&gt;Android&lt;/strong&gt; apercebi-me de que não existe tal aplicação para essas plataformas. Como é que conseguem sobreviver sem uma?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=42139" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b_ir2bCrNgX1kHKS71T_Xt28jLU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b_ir2bCrNgX1kHKS71T_Xt28jLU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b_ir2bCrNgX1kHKS71T_Xt28jLU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b_ir2bCrNgX1kHKS71T_Xt28jLU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=Q88oLlCc5Uo:rSjm7LILCfo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=Q88oLlCc5Uo:rSjm7LILCfo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=Q88oLlCc5Uo:rSjm7LILCfo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=Q88oLlCc5Uo:rSjm7LILCfo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=Q88oLlCc5Uo:rSjm7LILCfo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=Q88oLlCc5Uo:rSjm7LILCfo:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=Q88oLlCc5Uo:rSjm7LILCfo:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/Q88oLlCc5Uo" height="1" width="1"/&gt;</description><pubDate>Sun, 17 Jul 2011 22:28:25 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=42139</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=42139</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/07/17/guid-generator-my-first-windows-phone-application-is-available-on-the-marketplace.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/07/17/guid-generator-my-first-windows-phone-application-is-available-on-the-marketplace.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:41132</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/bUnlZN8mLkQ/m-233-todos-de-extens-227-o-e-infer-234-ncia-de-tipos-em-ac-231-227-o.aspx</link><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/C_2300_4.0/default.aspx">C#4.0</category><category domain="http://pontonetpt.org/blogs/paulomorgado/archive/tags/C_2300_3.0/default.aspx">C#3.0</category><title>Métodos De Extensão E Inferência De Tipos Em Acção</title><description>&lt;p align="justify"&gt;Eu uso extensivamente &lt;a title="Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/library/bb383977.aspx" target="_blank"&gt;métodos de extensão&lt;/a&gt;, quer seja para manter as clases pequenas e focadas, quer seja para melhorar a legibilidade do código.&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Enquanto portava uma aplicação &lt;strong&gt;WinForms&lt;/strong&gt; da platafirnma &lt;a title="Microsoft .NET Framework" href="http://www.microsoft.com/net/" target="_blank"&gt;&lt;strong&gt;.NET&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 1.1&lt;/strong&gt; para &lt;a title="Microsoft Visual C#" href="http://csharp.net/" target="_blank"&gt;C#&lt;/a&gt; 3.0, encontrei código como este:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;delegate int &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Int32DelegateStringBoolean&lt;/span&gt;(&lt;span style="color:blue;"&gt;string &lt;/span&gt;text, &lt;span style="color:blue;"&gt;bool &lt;/span&gt;flag);

&lt;span style="color:blue;"&gt;void &lt;/span&gt;DoStuff()
{
    &lt;span style="color:green;"&gt;// ...

    &lt;span style="color:blue;"&gt;var &lt;/span&gt;&lt;font color="#000000"&gt;x = (&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Int32DelegateStringBoolean&lt;/span&gt;(GetStuff), &lt;span style="color:blue;"&gt;new object&lt;/span&gt;[] { &lt;span style="color:#a31515;"&gt;&amp;quot;some text&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;true &lt;/span&gt;});

    &lt;span style="color:green;"&gt;// ...
&lt;/span&gt;}

&lt;span style="color:blue;"&gt;int &lt;/span&gt;GetStuff(&lt;span style="color:blue;"&gt;string &lt;/span&gt;text, &lt;span style="color:blue;"&gt;bool &lt;/span&gt;flag)
{
    &lt;span style="color:green;"&gt;// ...
&lt;/span&gt;}&lt;/pre&gt;

&lt;p align="justify"&gt;A &lt;strong&gt;.NET 2.0&lt;/strong&gt; introduziu uma API e tornou possível escrever o código de chamada a &lt;strong&gt;Invoke&lt;/strong&gt; assim:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;x = (&lt;span style="color:blue;"&gt;int&lt;/span&gt;)&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Int32DelegateStringBoolean&lt;/span&gt;(GetStuff), &lt;span style="color:#a31515;"&gt;&amp;quot;some text&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;p align="justify"&gt;Mas isto ainda não está fortemente tipado como eu gosto e o compilador não consegue verificar se me enganei. Este código será válido em tempo de compilação mas rebentará em tempo de execução:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;x = (&lt;span style="color:blue;"&gt;long&lt;/span&gt;)&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Int32DelegateStringBoolean&lt;/span&gt;(GetStuff), &lt;span style="color:#a31515;"&gt;&amp;quot;some text&amp;quot;&lt;/span&gt;, 10M, 5);&lt;/pre&gt;

&lt;p align="justify"&gt;Para tornar o código mais seguro e legível, decidi criar métodos de extensão para estender a classe &lt;a title="Control Class" href="http://msdn.microsoft.com/library/system.windows.forms.control.aspx" target="_blank"&gt;Control&lt;/a&gt; e providenciar métodos &lt;strong&gt;Invoke&lt;/strong&gt; fortemente tipados.&lt;/p&gt;

&lt;p align="justify"&gt;Em vez de definir delegates à medida para cada necessidade, usei os delegates &lt;strong&gt;Action&lt;/strong&gt; e &lt;strong&gt;Func&lt;/strong&gt; existentes na plataforma e criei métodos de extensão como este:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static &lt;/span&gt;TResult InvokeFunc&amp;lt;T1, T2, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, TResult&amp;gt; func, T1 param1, T2 param2)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;(TResult)(control.Invoke(func, param1, param2));
}&lt;/pre&gt;

&lt;p align="justify"&gt;Agora é possível substituir a chamada a &lt;strong&gt;Invoke&lt;/strong&gt; por esta chamada:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;x = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.InvokeFunc&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;, &lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;, &lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt;(GetStuff), &lt;span style="color:#a31515;"&gt;&amp;quot;some text&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;p align="justify"&gt;E agora o compilador consegue validar o tipo o delegate, dos parâmetros e do valor de retorno.&lt;/p&gt;

&lt;p align="justify"&gt;Desde a introdução do &lt;strong&gt;C# 2.0&lt;/strong&gt; que não é necessário escrever o código de instanciação do delegate&amp;#160; se o compilador conseguir inferir o seu tipo, o que torna o código ainda mais simples:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;x = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.InvokeFunc&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;, &lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt;(GetStuff, &lt;span style="color:#a31515;"&gt;&amp;quot;some text&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;p align="justify"&gt;O compilador de &lt;strong&gt;C#&lt;/strong&gt; é ainda capaz de inferir o tipo dos parâmetors de &lt;strong&gt;InvokeFunc&lt;/strong&gt; tornado o código ainda mais simples e legível:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;x = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.InvokeFunc(GetStuff, &lt;span style="color:#a31515;"&gt;&amp;quot;some text&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;p align="justify"&gt;Muito melhor do que aquilo com que começamos, não é?&lt;/p&gt;

&lt;p align="justify"&gt;Até ao momento já implementei os seguintes:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color:green;"&gt;Provides extended functionality to &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;see cref=&amp;quot;System.Windows.Forms.Control&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;.
&lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ControlExtensions
&lt;/span&gt;{
    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to invoke.&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;A &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;typeparamref name=&amp;quot;TResult&amp;quot;/&amp;gt; &lt;/span&gt;&lt;span style="color:green;"&gt;that contains the return value from the function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) being invoked.&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 &lt;/span&gt;TResult InvokeFunc&amp;lt;TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;TResult&amp;gt; func)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;(TResult)(control.Invoke(func));
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The parameter of the action.&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;A &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;typeparamref name=&amp;quot;TResult&amp;quot;/&amp;gt; &lt;/span&gt;&lt;span style="color:green;"&gt;that contains the return value from the function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) being invoked.&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 &lt;/span&gt;TResult InvokeFunc&amp;lt;T1, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, TResult&amp;gt; func, T1 param1)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;(TResult)(control.Invoke(func, param1));
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the function.&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;A &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;typeparamref name=&amp;quot;TResult&amp;quot;/&amp;gt; &lt;/span&gt;&lt;span style="color:green;"&gt;that contains the return value from the function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) being invoked.&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 &lt;/span&gt;TResult InvokeFunc&amp;lt;T1, T2, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, TResult&amp;gt; func, T1 param1, T2 param2)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;(TResult)(control.Invoke(func, param1, param2));
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the function.&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;A &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;typeparamref name=&amp;quot;TResult&amp;quot;/&amp;gt; &lt;/span&gt;&lt;span style="color:green;"&gt;that contains the return value from the function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) being invoked.&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 &lt;/span&gt;TResult InvokeFunc&amp;lt;T1, T2, T3, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, T3, TResult&amp;gt; func, T1 param1, T2 param2, T3 param3)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;(TResult)(control.Invoke(func, param1, param2, param3));
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the forth parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The forth parameter of the function.&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;A &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;typeparamref name=&amp;quot;TResult&amp;quot;/&amp;gt; &lt;/span&gt;&lt;span style="color:green;"&gt;that contains the return value from the function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) being invoked.&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 &lt;/span&gt;TResult InvokeFunc&amp;lt;T1, T2, T3, T4, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, T3, T4, TResult&amp;gt; func, T1 param1, T2 param2, T3 param3, T4 param4)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;(TResult)(control.Invoke(func, param1, param2, param3, param4));
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;InvokeAction(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action &lt;/span&gt;action)
    {
        control.Invoke(action);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the parameter.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;InvokeAction&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T&amp;gt; action, T param)
    {
        control.Invoke(action, param);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;InvokeAction&amp;lt;T1, T2&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T1, T2&amp;gt; action, T1 param1, T2 param2)
    {
        control.Invoke(action, param1, param2);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;InvokeAction&amp;lt;T1, T2, T3&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T1, T2, T3&amp;gt; action, T1 param1, T2 param2, T3 param3)
    {
        control.Invoke(action, param1, param2, param3);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the forth parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to invoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to invoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The forth parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;InvokeAction&amp;lt;T1, T2, T3, T4&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T1, T2, T3, T4&amp;gt; action, T1 param1, T2 param2, T3 param3, T4 param4)
    {
        control.Invoke(action, param1, param2, param3, param4);
    }
    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to BeginInvoke.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeFunc&amp;lt;TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;TResult&amp;gt; func)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(func);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The parameter of the action.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeFunc&amp;lt;T1, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, TResult&amp;gt; func, T1 param1)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(func, param1);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the function.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeFunc&amp;lt;T1, T2, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, TResult&amp;gt; func, T1 param1, T2 param2)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(func, param1, param2);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the function.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeFunc&amp;lt;T1, T2, T3, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, T3, TResult&amp;gt; func, T1 param1, T2 param2, T3 param3)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(func, param1, param2, param3);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified function (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;func&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the forth parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;TResult&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the result.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the function on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;func&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The function to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the function.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The forth parameter of the function.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeFunc&amp;lt;T1, T2, T3, T4, TResult&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T1, T2, T3, T4, TResult&amp;gt; func, T1 param1, T2 param2, T3 param3, T4 param4)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(func, param1, param2, param3, param4);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to BeginInvoke.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeAction(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action &lt;/span&gt;action)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(action);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the parameter.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The parameter of the action.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeAction&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T&amp;gt; action, T param)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(action, param);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the action.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeAction&amp;lt;T1, T2&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T1, T2&amp;gt; action, T1 param1, T2 param2)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(action, param1, param2);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the action.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeAction&amp;lt;T1, T2, T3&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T1, T2, T3&amp;gt; action, T1 param1, T2 param2, T3 param3)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(action, param1, param2, param3);
    }

    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color:green;"&gt;Executes the specified action (&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;paramref name=&amp;quot;action&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;) on the thread that owns the control&amp;#39;s underlying window handle.
    &lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The type of the forth parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/typeparam&amp;gt;
    /// &amp;lt;param name=&amp;quot;control&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The control to BeginInvoke the action on.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The action to BeginInvoke.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The first parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The second parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The third parameter of the action.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&amp;quot;param4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The forth parameter of the action.&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;An System.IAsyncResult that represents the result of the operation.&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 &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult &lt;/span&gt;BeginInvokeAction&amp;lt;T1, T2, T3, T4&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;control, &lt;span style="color:#2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T1, T2, T3, T4&amp;gt; action, T1 param1, T2 param2, T3 param3, T4 param4)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;control.BeginInvoke(action, param1, param2, param3, param4);
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;Usem-nos e necessitarem.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=41132" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/geqYP5YQcZaJm2sTR2HO-TsODks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/geqYP5YQcZaJm2sTR2HO-TsODks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/geqYP5YQcZaJm2sTR2HO-TsODks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/geqYP5YQcZaJm2sTR2HO-TsODks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=bUnlZN8mLkQ:gWedJU779M8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=bUnlZN8mLkQ:gWedJU779M8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=bUnlZN8mLkQ:gWedJU779M8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=bUnlZN8mLkQ:gWedJU779M8:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=bUnlZN8mLkQ:gWedJU779M8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=bUnlZN8mLkQ:gWedJU779M8:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=bUnlZN8mLkQ:gWedJU779M8:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/bUnlZN8mLkQ" height="1" width="1"/&gt;</description><pubDate>Mon, 18 Apr 2011 00:43:06 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/rsscomments.aspx?PostID=41132</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/paulomorgado/commentapi.aspx?PostID=41132</wfw:comment><comments>http://pontonetpt.org/blogs/paulomorgado/archive/2011/04/18/m-233-todos-de-extens-227-o-e-infer-234-ncia-de-tipos-em-ac-231-227-o.aspx#comments</comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/04/18/m-233-todos-de-extens-227-o-e-infer-234-ncia-de-tipos-em-ac-231-227-o.aspx</feedburner:origLink></item><item><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:41131</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/PT/~3/v5mgk7kIl7c/oferta-de-licen-231-as-do-net-reflector.aspx</link><title>Oferta De Licenças Do .NET Reflector</title><description>&lt;p align="center"&gt;&lt;a target="_blank" href="http://www.reflector.net/blog/wp-content/themes/reflect/Logo.png" title="http://www.reflector.net/"&gt;&lt;img src="http://www.reflector.net/blog/wp-content/themes/reflect/Logo.png" style="border-bottom-style:none;border-left-style:none;display:block;border-top-style:none;float:none;margin-left:auto;border-right-style:none;margin-right:auto;" alt="" /&gt;&lt;/a&gt;&lt;img src="http://c.statcounter.com/6351124/0/2af852d6/1/" alt="StatCounter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;A &lt;a target="_blank" href="http://www.red-gate.com/" title="redgate - ingeniously simple tools"&gt;Red Gate&lt;/a&gt; deu-me algumas licen&amp;ccedil;as do &lt;a target="_blank" href="http://www.reflector.net/" title=".NET Reflector"&gt;.NET Reflector&lt;/a&gt; para distribuir.&lt;/p&gt;
&lt;p align="justify"&gt;Os primeiros a responder a esta entrada em qualquer dos meus blogues com uma frase acerca do &lt;strong&gt;.NET Reflector&lt;/strong&gt;, nome e e-mail de contacto ganham uma licen&amp;ccedil;a gr&amp;aacute;tis.&lt;/p&gt;
&lt;p align="justify"&gt;Despachem-se! J&amp;aacute; n&amp;atilde;o h&amp;aacute; muitas!&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Actualiza&amp;ccedil;&amp;atilde;o:&lt;/strong&gt; J&amp;aacute; foram atribu&amp;iacute;das todas as licen&amp;ccedil;as.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=41131" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ynwmkZWMlQnWKns0ylHhwy9uwDQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ynwmkZWMlQnWKns0ylHhwy9uwDQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ynwmkZWMlQnWKns0ylHhwy9uwDQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ynwmkZWMlQnWKns0ylHhwy9uwDQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=v5mgk7kIl7c:pyrzFVqtVR8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=v5mgk7kIl7c:pyrzFVqtVR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=v5mgk7kIl7c:pyrzFVqtVR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=v5mgk7kIl7c:pyrzFVqtVR8:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=v5mgk7kIl7c:pyrzFVqtVR8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/PT?a=v5mgk7kIl7c:pyrzFVqtVR8:kZPkksuLl5A"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/PT?i=v5mgk7kIl7c:pyrzFVqtVR8:kZPkksuLl5A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/PT/~4/v5mgk7kIl7c" height="1" width="1"/&gt;</description><pubDate>Sun, 17 Apr 2011 23:19:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://pontonetpt.org/blogs/paulomorgado/archive/2011/04/18/oferta-de-licen-231-as-do-net-reflector.aspx</feedburner:origLink></item></channel></rss>

