<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rɘɘ7</title>
	<atom:link href="http://ree7.fr/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://ree7.fr/blog</link>
	<description></description>
	<lastBuildDate>Wed, 16 May 2012 22:00:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>[WP7] Tout savoir sur la gestion des images</title>
		<link>http://ree7.fr/blog/2011/12/wp7-tout-savoir-sur-la-gestion-des-images/</link>
		<comments>http://ree7.fr/blog/2011/12/wp7-tout-savoir-sur-la-gestion-des-images/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 13:56:44 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Dev']]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bitmapimage]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=173</guid>
		<description><![CDATA[Un très rapide post pour partager le lien vers un excellent article de Stefan Wick sur l&#8217;optimisation et la gestion des images sur Windows Phone 7 : http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx
En particulier il nous présente, bien entendu les classiques  [...]]]></description>
			<content:encoded><![CDATA[<p>Un très rapide post pour partager le lien vers un excellent article de Stefan Wick sur l&#8217;optimisation et la gestion des images sur Windows Phone 7 : <a href="http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx">http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx</a></p>
<p>En particulier il nous présente, bien entendu les classiques BitmapCreateOptions de la classe BitmapImage pour choisir un chargement/décodage à la demande ou immédiat.</p>
<p>Mais aussi le PictureDecoder, qui permet de décoder une image dans la résolution voulue, et donc de gagner en vitesse et empreinte mémoire ! Malheureusement, celui ci ne sait décoder que les JPG, et pas les PNG&#8230;</p>
<p>Une dernière chose, à laquelle je me suis heurté lors du développement du Tile Toolkit : le décodage d&#8217;image ne peut se faire QUE sur le thread UI et c&#8217;est fort dommage&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2011/12/wp7-tout-savoir-sur-la-gestion-des-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tile Toolkit for Windows Phone 7</title>
		<link>http://ree7.fr/blog/2011/12/tile-toolkit-for-windows-phone-7/</link>
		<comments>http://ree7.fr/blog/2011/12/tile-toolkit-for-windows-phone-7/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 17:48:17 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Dev']]></category>
		<category><![CDATA[Sources]]></category>
		<category><![CDATA[codeplex]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[live tiles]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[windows phone 7]]></category>
		<category><![CDATA[xaml]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=155</guid>
		<description><![CDATA[
English readers, you&#8217;ll find the link to Codeplex (where everything about the projet is written in English), at the end of this post.
Envie d&#8217;avoir une belle tuile avec un compteur comme celles du systèmes ?
De générer un contenu de tuile dynamiquement depuis C# avec un peu de composition  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-180" title="Logo Tile Toolkit" src="http://ree7.fr/blog/wp-content/uploads/2011/12/Logo.png" alt="" width="512" height="512" /></p>
<p style="text-align: left;"><em>English readers, you&#8217;ll find the link to Codeplex (where everything about the projet is written in English), at the end of this post.</em></p>
<p>Envie d&#8217;avoir une belle tuile avec un compteur comme celles du systèmes ?<br />
De générer un contenu de tuile dynamiquement depuis C# avec un peu de composition graphique ? Idéalement le tout décrit en XAML ?<br />
Ou encore d&#8217;utiliser des tuiles dans l&#8217;UI de votre appli ?</p>
<p>Je viens de publier sur Codeplex une petite (20Ko) librairie Open source (MS-PL) qui permet tout ça !<br />
Le but du jeu était à la base de permettre à mes copains développeurs WP7 d&#8217;avoir des tuiles identiques au pixel-près à celles des mails/SMS, mais j&#8217;ai un petit peu dévié dans le scope et la lib permet de générer une tuile avec le contenu de votre choix, le tout décrit en XAML.</p>
<p><img class="aligncenter" title="Tile Toolkit sample screenshot" src="http://ree7.fr/files/images/WP7TileToolkit/SampleScreenshot_wannotations.png" alt="" width="448" height="448" /></p>
<p>Elle est livrée avec un template de Tile identique aux tuiles mails/SMS. Je suis ouvert aux feature-request et rapports de bugs, bien évidemment.</p>
<p><img src="http://i3.codeplex.com/Download?ProjectName=CodePlex&amp;DownloadId=143329" alt="Codeplex" /><br />
En espérant vous rendre service <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> , vous trouverez le binaire et le sample (dans le code source) sur CodePlex.</p>
<h2>Links</h2>
<ul>
<li><span class="Apple-style-span" style="line-height: 18px;">Codeplex project home : </span><a style="line-height: 18px;" href="http://wp7tiletoolkit.codeplex.com/">http://wp7tiletoolkit.codeplex.com/</a></li>
<li>NuGet project page : <a href="https://nuget.org/packages/Ree7.WPTileToolkit">http://nuget.org/packages/Ree7.WPTileToolkit</a></li>
<li>NuGet command line :</li>
<ul>
<li>
<pre>PM&gt; Install-Package Ree7.WPTileToolkit</pre>
</li>
</ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2011/12/tile-toolkit-for-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un thème Visual Studio reposant&#8230;</title>
		<link>http://ree7.fr/blog/2011/09/un-theme-visual-studio-reposant/</link>
		<comments>http://ree7.fr/blog/2011/09/un-theme-visual-studio-reposant/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 13:56:03 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[confort]]></category>
		<category><![CDATA[monokai]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=117</guid>
		<description><![CDATA[
Depuis que je fais de l&#8217;informatique, j&#8217;ai toujours eu un faible pour les thèmes de couleur sombres, surtout quand il s&#8217;agit d&#8217;y passer la journée&#8230;
Visual Studio ne fait pas exception, et j&#8217;en profite pour glisser un lien vers le thème que j&#8217;utilise actuellement : Monokai.
Disponible aussi (en  [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://github.com/mmonteleone/monokai-vs/raw/master/screenshots/csharp.png" alt="" width="627" height="272" /></p>
<p>Depuis que je fais de l&#8217;informatique, j&#8217;ai toujours eu un faible pour les thèmes de couleur sombres, surtout quand il s&#8217;agit d&#8217;y passer la journée&#8230;</p>
<p>Visual Studio ne fait pas exception, et j&#8217;en profite pour glisser un lien vers le thème que j&#8217;utilise actuellement : <strong><a title="Monokai sur GitHub" href="https://github.com/mmonteleone/monokai-vs">Monokai</a></strong>.</p>
<p>Disponible aussi (en light) sur <a href="http://studiostyl.es/schemes/monokai">studiostyl.es</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2011/09/un-theme-visual-studio-reposant/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Session Barcamp Windows Phone 7 sur Lyon</title>
		<link>http://ree7.fr/blog/2011/02/session-barcamp-windows-phone-7-sur-lyon/</link>
		<comments>http://ree7.fr/blog/2011/02/session-barcamp-windows-phone-7-sur-lyon/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 19:16:08 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[lyon]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=78</guid>
		<description><![CDATA[
Amis développeurs du Sud-Est (et d&#8217;ailleurs, on n&#8217;est pas sectaires !), un évènement autour de Windows Phone 7 va avoir lieu dans notre belle ville de Lyon (comme quoi à Lyon, il n&#8217;y a pas que le JUG  ).
Venez nous retrouver le 22 Mars (après-midi) pour discuter de Windows Phone 7 dans une  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/b/editeurs_de_logiciels/archive/2011/02/14/venez-participer-au-1er-barcamp-windows-phone-7-de-la-r-233-gion-rh-244-ne-alpes.aspx" target="_blank"><img class="aligncenter" title="Flyer Barcamp" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-04-86/0246.barcamp-1.PNG" alt="Flyer Barcamp" width="550" height="408" /><img class="aligncenter" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-04-86/8132.barcamp-2.PNG" alt="" width="550" height="369" /></a></p>
<p>Amis développeurs du Sud-Est (et d&#8217;ailleurs, on n&#8217;est pas sectaires !), un évènement autour de Windows Phone 7 va avoir lieu dans notre belle ville de Lyon (comme quoi à Lyon, il n&#8217;y a pas que le JUG <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<p>Venez nous retrouver le 22 Mars (après-midi) pour discuter de Windows Phone 7 dans une ambiance détendue (Barcamp = technologie + apérologie). Les sujets abordés seront en fonction de l&#8217;audience, cependant dans les grandes lignes :</p>
<ul>
<li>Fabien Decret (MVP technologies embarquées) vous parlera de développement sous WP7 (le sdk, le web, les spécificités de Windows Phone 7, &#8230;)</li>
<li>Moi-même (MCP Windows Mobile) vous parlerai de développement et de design (orienté UI/UX, Expression Blend, &#8230;)</li>
<li>Vincent Gaviot (marketing Adeneo Embedded) vous parlera des aspects marketplace et monétisation</li>
<li>Et enfin un intervenant Microsoft viendra nous épauler sur tous ces sujets <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>C&#8217;est une première sur Lyon et c&#8217;est gratuit. Par contre, les places sont limitées.<br />
Pour vous inscrire ou avoir plus d&#8217;infos, contactez-nous : <strong>training.emea[at]adeneo-embedded.com </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2011/02/session-barcamp-windows-phone-7-sur-lyon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adopt a WP7 : iPod to Zune how-to</title>
		<link>http://ree7.fr/blog/2011/02/adopt-a-wp7-ipod-to-zune/</link>
		<comments>http://ree7.fr/blog/2011/02/adopt-a-wp7-ipod-to-zune/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 20:11:08 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[musique]]></category>
		<category><![CDATA[transfert]]></category>
		<category><![CDATA[windows phone 7]]></category>
		<category><![CDATA[zune]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=70</guid>
		<description><![CDATA[
Une fois n&#8217;est pas coutume je ne vais pas parler développement, mais donner quelques tips pour que votre adoption d&#8217;un Windows Phone 7 se passe bien.
Vous avez tout juste sorti votre nouveau téléphone de son coffret et jusque ici vous utilisiez un iPod/iPhone pour emmener votre musique avec vous ?  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-65" title="Samsung Omnia7 et iPod Nano" src="http://ree7.fr/blog/wp-content/uploads/2011/02/DSC_7169s.jpg" alt="Samsung Omnia7 et iPod Nano" width="640" height="425" /><br />
Une fois n&#8217;est pas coutume je ne vais pas parler développement, mais donner quelques tips pour que votre adoption d&#8217;un Windows Phone 7 se passe bien.</p>
<p>Vous avez tout juste sorti votre nouveau téléphone de son coffret et jusque ici vous utilisiez un iPod/iPhone pour emmener votre musique avec vous ? Bien sur, avec le temps, le contenu de votre device siglé de la pomme est devenu une séléction du meilleur de votre collection musicale qui prendrait des lustres à refaire, hors de question de repartir de zéro !</p>
<p>La manipulation n&#8217;est pas si simple que cela, mais suivez le guide et vous pourrez retrouver votre bibliothèque sur votre Windows Phone ! <em>(et réjouissez-vous, vous pourrez raffiner bien plus facilement votre collection musicale a l&#8217;avenir, contrairement à un iPod, WP7 sait SUPPRIMER un morceau de musique).</em></p>
<p><strong>Note </strong>for my english-speaking readers, there&#8217;s no english version of this post so far (lack of time), but if you need one leave a comment and I&#8217;ll make one.</p>
<p><em> <span id="more-70"></span></em>[cliquez sur les image pour les agrandir]<br />
<a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step01.png"><img class="aligncenter size-medium wp-image-66" title="ipod2wp7 : step 1" src="http://ree7.fr/blog/wp-content/uploads/2011/02/step01-300x245.png" alt="" width="300" height="245" /></a></p>
<p><a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step01.png"></a> iTunes ne permettant pas de récupérer le contenu de votre iPod sous forme de mp3, il faut faire appel à ce bon vieux Winamp.<br />
Une fois installé, son module de reconnaissance de périphérique vous montrera le contenu de vos périphériques Apple et Android.</p>
<ul>
<li>Affichez le contenu de votre périphérique en cliquant dessus</li>
<li>Sélectionnez toutes les pistes</li>
<li>Via un clic droit, affichez le menu contextuel (cf. photo 1) et sélectionnez &laquo;&nbsp;Copier dans les Médias Locaux&nbsp;&raquo;. Ceci va transférer le contenu de votre iPod dans le dossier d&#8217;export par défaut de Winamp (généralement [User]\Ma musique), pour plus de facilité, assurez-vous que ce répertoire soit vide avant de vous lancer (quitte à déplacer temporairement son contenu)</li>
</ul>
<p style="text-align: center;"><a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step02.png"><img class="size-medium wp-image-67 aligncenter" title="ipod2wp7 : step 2" src="http://ree7.fr/blog/wp-content/uploads/2011/02/step02-300x223.png" alt="" width="300" height="223" /></a></p>
<p style="text-align: center;"><a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step02.png"></a>Une fois le transfert terminé, pour m&#8217;y retrouver plus facilement j&#8217;ai regroupé mes mp3 dans un sous-dossier &laquo;&nbsp;iPod content&nbsp;&raquo;. A ce stade vous devriez retrouver tous vos morceaux, nommés selon leurs tags, et proprement groupés par répertoire, merci Winamp.</p>
<p><a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step04.png"><img class="aligncenter size-medium wp-image-69" title="ipod2wp7 : step 4" src="http://ree7.fr/blog/wp-content/uploads/2011/02/step04-300x220.png" alt="" width="300" height="220" /></a></p>
<p><a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step04.png"></a>Passons à Zune. Lorsque vous faites glisser un élément vers votre téléphone, par défaut, Zune va établir un groupe de synchronisation pour cet élément. C&#8217;est pas clair ? Oui je l&#8217;avoue. En clair, vous faites glisser un album de Skrillex sur votre téléphone, si jamais vous ajoutez une nouvelle piste de l&#8217;artiste Skrillex dans la collection du PC, Zune va automatiquement la copier sur le téléphone.</p>
<p>Gentille attention, mais qui va à l&#8217;encontre de ce que l&#8217;on veut faire ici (sinon vous allez finir avec l&#8217;intégralité de vos mp3 sur le téléphone&#8230; du moins ce qui tient dans les maigres 8 à 16Go).</p>
<p>Donc il faut aller dans les paramètres de Zune, section &laquo;&nbsp;Téléphone&nbsp;&raquo;, &laquo;&nbsp;Options Sync&nbsp;&raquo; et pour ce qui est de la musique, cocher l&#8217;option de synchronisation &laquo;&nbsp;Manuel&nbsp;&raquo; (cf. photo 3).</p>
<p><a href="http://ree7.fr/blog/wp-content/uploads/2011/02/step03.png"><img class="aligncenter size-medium wp-image-68" title="ipod2wp7 : step 3" src="http://ree7.fr/blog/wp-content/uploads/2011/02/step03-300x204.png" alt="" width="300" height="204" /></a><br />
Maintenant, au tour aux paramètres du logiciel en lui même (paramètres &gt; &laquo;&nbsp;Logiciel&nbsp;&raquo; &gt; &laquo;&nbsp;Collection&nbsp;&raquo;). Utilisateurs de Windows Vista et supérieur, par défaut les collections (musique, vidéo, image) de Zune sont couplées aux collections correspondantes de l&#8217;OS. Pratique, généralement, rien à configurer après l&#8217;installation de Zune, tout fonctionne déjà !<br />
Mais le temps de notre manip&#8217;, il va falloir désaligner les collections Windows de celles de Zune, c&#8217;est à dire permettre de spécifier soi-même les répertoires où Zune cherchera son contenu.</p>
<p>Ensuite, il faut faire le vide dans la liste des répertoires surveillés pour la musique, puis ajouter uniquement le répertoire contenant les pistes de l&#8217;iPod (cf. photo 4).<br />
Du coup, après un court instant d&#8217;analyse du contenu du dossier, la bibliothèque musicale Zune contient toutes les pistes en provenance de l&#8217;iPod/iPhone, il ne vous reste plus qu&#8217;a faire glisser l&#8217;ensemble de votre collection musicale vers l&#8217;icône du téléphone en bas à gauche de Zune, et le tour est joué ! <em>(En passant, Zune offre la possibilité de transcoder à la volée les morceaux dont le bitrate dépasse un certain seuil, ce qui vous permettra de ne pas remplir trop vite votre téléphone avec des morceaux en 320kbps).</em></p>
<p>Vous pouvez bien sur remettre la configuration de la source de la bibliothèque musicale de Zune dans son état initiale une fois le transfert des pistes sur le téléphone terminé. Bonne écoute !</p>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2011/02/adopt-a-wp7-ipod-to-zune/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Composition d&#8217;image : rendre du XAML sous forme d&#8217;image [Update 12/2011]</title>
		<link>http://ree7.fr/blog/2010/10/composition-dimage-rendre-du-xaml-sous-forme-dimage/</link>
		<comments>http://ree7.fr/blog/2010/10/composition-dimage-rendre-du-xaml-sous-forme-dimage/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 13:00:04 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Sources]]></category>
		<category><![CDATA[bitmapimage]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[imaging]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[windows phone 7]]></category>
		<category><![CDATA[writablebitmap]]></category>
		<category><![CDATA[xaml]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=54</guid>
		<description><![CDATA[Voici un morceau de code qui pourront rendre service lors de développements Silverlight (3 et +, Windows Phone 7, &#8230;) : si vous avez besoin de générer une image dans votre application : à partir de Silverlight 3, la classe WriteableBitmap est à votre disposition et permet de créer une image pixel  [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un morceau de code qui pourront rendre service lors de développements Silverlight (<em>3 et +, Windows Phone 7, &#8230;</em>) : si vous avez besoin de générer une image dans votre application : à partir de Silverlight 3, la classe <strong>WriteableBitmap</strong> est à votre disposition et permet de créer une image pixel par pixel.</p>
<p>Elle est de transformer un arbre XAML en une image, seule ombre au tableau; cette classe est parfaite pour l&#8217;affichage à l&#8217;écran, en effet le contrôle <em>Image</em> est capable d&#8217;afficher un <em>WriteableBitmap</em> mais pour la sauvegarde c&#8217;est une autre paire de manche : nativement, Silverlight ne propose pas d&#8217;encodeur PNG ou JPEG pour exporter ce paquet de pixels.</p>
<p>Le code qui suit vous permettra de profiter de la praticité de Silverlight pour composer une image (à vous les superpositions alpha, le texte antialiasé positionné comme bon vous semble en quelques lignes, les layouts faciles à utiliser &#8211; grid, stackpanel, &#8230;) exportable en PNG <strong>non compressé</strong> <em>(attention quand même du coup, et en passant merci à </em><a href="http://blogs.msdn.com/b/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx" target="_blank"><em>Joe Stegman</em></a><em> pour son PNGEncoder)</em>.</p>
<p>Vous pourrez ensuite manipuler ces images comme bon vous semble, car deux formats de sorties sont disponibles, l&#8217;une en Stream et l&#8217;autre en Byte[]. Aucun problème pour les sérialiser (contrairement aux BitmapImage) <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>Code and english version of the post available below</em></p>
<p><span id="more-54"></span></p>
<p>Here&#8217;s a piece of code that could help your Silverlight developments <em>(SL3 and newer, Windows Phone 7, &#8230;)</em> : if you need to generate an image in your application, starting with Silverlight 3 the <strong>WriteableBitmap</strong> class is available to create an image and interact with it pixel by pixel.</p>
<p><em>WriteableBitmap</em> can transform a XAML visual tree into an image (meaning a pixel array); this is perfect for a screen output as the <em>Image </em>control knows how to display it. For saving on the other hand, it&#8217;s a different story : Silverlight simply does not provide a PNG or JPEG encoder to export that pixel array.</p>
<p>The following code will enable you to leverage Silverlight&#8217;s convenience for composing an image (alpha overlays, antialised text, straightforward containers for your layout, &#8230;), and export it as a PNG image (<strong>uncompressed</strong>) &#8211; <em>thanks <a href="http://blogs.msdn.com/b/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx" target="_blank">Joe Stegman</a> for your PNGEncoder -</em>.</p>
<p>You will then be able to manipulate those images the way your want, two outputs are available, one as a Stream and the other one as a Byte[]. Unlike the <em>BitmapImage</em>, you&#8217;ll be able to serialize it as a part of your classes <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Preview code :</p>
<pre class="brush: csharp; title: ; notranslate">
/**********************************************************
 * Control2Png.cs
 * Renders a Silverlight UIElement as an uncompressed PNG
 * stream or byte array. Relies on Joe Stegman's great
 * PNGEncoder classes.
 *
 * Written by : Pierre BELIN

 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the Lesser GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the Lesser GNU General Public License
 * along with this program.  If not, see .
 *
 **********************************************************/

using System;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;

namespace Ree7.Utils.Imaging
{
    ///
&lt;summary&gt; /// See http://ree7.fr/blog/2010/10/composition-dimage-rendre-du-xaml-sous-forme-dimage/
 /// &lt;/summary&gt;
    public class ControlToPng
    {
        public static Stream RenderAsPNGStream(UIElement e)
        {
            try
            {
                WriteableBitmap wb = new WriteableBitmap(e, null);
                EditableImage edit = new EditableImage(wb.PixelWidth, wb.PixelHeight);

                for (int y = 0; y &lt; wb.PixelHeight; ++y)
                {
                    for (int x = 0; x &lt; wb.PixelWidth; ++x)
                    {
                        byte[] rgba = ExtractRGBAfromPremultipliedARGB(wb.Pixels[wb.PixelWidth * y + x]);
                        edit.SetPixel(x, y, rgba[0], rgba[1], rgba[2], rgba[3]);
                    }
                }

                return edit.GetStream();

            }
            catch (Exception)
            {
                return null;
            }
        }

        public static byte[] RenderAsPNGBytes(UIElement e)
        {
            Stream s = RenderAsPNGStream(e);

            if (s == null)
                return null;

            byte[] bytes = ReadFully(s, (int)s.Length);
            return bytes;
        }

        ///
&lt;summary&gt; /// Convert from premultiplied alpha ARGB to a non-premultiplied RGBA (fix 12/2011)
 /// &lt;/summary&gt;
        ///
        private static byte[] ExtractRGBAfromPremultipliedARGB(int pARGB)
        {
            byte[] sourcebytes = new byte[4];
            sourcebytes[0] = (byte)(pARGB &gt;&gt; 24);
            sourcebytes[1] = (byte)((pARGB &amp; 0x00FF0000) &gt;&gt; 16);
            sourcebytes[2] = (byte)((pARGB &amp; 0x0000FF00) &gt;&gt; 8);
            sourcebytes[3] = (byte)(pARGB &amp; 0x000000FF);

            if (pARGB == 0) return sourcebytes; // optimization for images with many transparent pixels

            byte[] destbytes = new byte[4];

            if (sourcebytes[0] == 0 || sourcebytes[0] == 255)
            {
                destbytes[0] = sourcebytes[1];
                destbytes[1] = sourcebytes[2];
                destbytes[2] = sourcebytes[3];
                destbytes[3] = sourcebytes[0];
            }
            else
            {
                double factor = 255.0 / sourcebytes[0];
                double r = sourcebytes[1] * factor;
                double g = sourcebytes[2] * factor;
                double b = sourcebytes[3] * factor;

                destbytes[0] = Convert.ToByte(Math.Min(Byte.MaxValue, r));
                destbytes[1] = Convert.ToByte(Math.Min(Byte.MaxValue, g));
                destbytes[2] = Convert.ToByte(Math.Min(Byte.MaxValue, b));
                destbytes[3] = sourcebytes[0];
            }

            return destbytes;
        }

        ///
&lt;summary&gt; /// Reads data from a stream until the end is reached. The
 /// data is returned as a byte array. An IOException is
 /// thrown if any of the underlying IO calls fail.
 /// &lt;/summary&gt;
        ///The stream to read data from
        ///The initial buffer length
        private static byte[] ReadFully(Stream stream, int initialLength)
        {
            // If we've been passed an unhelpful initial length, just
            // use 32K.
            if (initialLength &lt; 1)
            {
                initialLength = 32768;
            }

            byte[] buffer = new byte[initialLength];
            int read = 0;

            int chunk;
            while ((chunk = stream.Read(buffer, read, buffer.Length - read)) &gt; 0)
            {
                read += chunk;

                // If we've reached the end of our buffer, check to see if there's
                // any more information
                if (read == buffer.Length)
                {
                    int nextByte = stream.ReadByte();

                    // End of stream? If so, we're done
                    if (nextByte == -1)
                    {
                        return buffer;
                    }

                    // Nope. Resize the buffer, put in the byte we've just
                    // read, and continue
                    byte[] newBuffer = new byte[buffer.Length * 2];
                    Array.Copy(buffer, newBuffer, buffer.Length);
                    newBuffer[read] = (byte)nextByte;
                    buffer = newBuffer;
                    read++;
                }
            }
            // Buffer is now too big. Shrink it.
            byte[] ret = new byte[read];
            Array.Copy(buffer, ret, read);
            return ret;
        }
    }
}
</pre>
<p><strong>Update 01/12/2011 :</strong> Fixed the error for translucent pixels that were not looking right, I forgot to offset the color values as WritableBitmap gives premultiplied alpha pixel values.</p>
<ul>
<li>Source code : <a href="http://ree7.fr/blog/wp-content/uploads/2010/10/Control2Png.zip">Control2Png.zip</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2010/10/composition-dimage-rendre-du-xaml-sous-forme-dimage/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Désactiver le lock screen sous Windows Phone 7</title>
		<link>http://ree7.fr/blog/2010/10/desactiver-le-lock-screen-sous-windows-phone-7/</link>
		<comments>http://ree7.fr/blog/2010/10/desactiver-le-lock-screen-sous-windows-phone-7/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 15:53:07 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Dev']]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[lockscreen]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=47</guid>
		<description><![CDATA[
Windows Phone 7 n&#8217;est pas multi-tâche (du moins pour les développeurs tiers), ça vous le saviez déjà. Mais disons que vous souhaitez développer une application qui occupe le téléphone un long moment sans interaction de l&#8217;utilisateur avec l&#8217;écran (ce qui aurait pu être une tâche de fond sous WM6.5  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-48" title="Lockscreen Windows Phone 7" src="http://ree7.fr/blog/wp-content/uploads/2010/10/IMAG0030.jpg" alt="Lockscreen Windows Phone 7" width="430" height="640" /><br />
Windows Phone 7 n&#8217;est pas multi-tâche (du moins pour les développeurs tiers), ça vous le saviez déjà. Mais disons que vous souhaitez développer une application qui occupe le téléphone un long moment sans interaction de l&#8217;utilisateur avec l&#8217;écran (ce qui aurait pu être une tâche de fond sous WM6.5 ou Android mais je vais m&#8217;éloigner de mon sujet&#8230;) : vous allez rencontrer un problème, c&#8217;est que le téléphone va se mettre en veille et tombstonner votre application.</p>
<p>Cela peut être fort gênant si vous développez une application de musique (radio), ou vidéo (bien que si vous utilisez MediaElement, les choses ont été bien faites et la lecture d&#8217;un média inhibe le lockscreen), ou encore une application de tracking GPS (<strong>#ridetracker</strong><em>, projet WP7 à venir sur ce blog</em>).</p>
<p>Sachez que vous pouvez inhiber la veille du téléphone de deux façons :</p>
<ul>
<li>Microsoft.Phone.Shell.PhoneApplicationService.Current.ApplicationIdleDetectionMode = Microsoft.Phone.Shell.IdleDetectionMode.Disabled<br />
Permet à votre application de ne pas se faire tombstonner quand le téléphone se met en veille, en clair votre application tourne derrière le lockscreen. C&#8217;est le comportement le plus proche d&#8217;un thread d&#8217;arrière plan.</li>
<li>Microsoft.Phone.Shell.PhoneApplicationService.Current.UserIdleDetectionMode = Microsoft.Phone.Shell.IdleDetectionMode.Disabled<br />
Permet de désactiver purement et simplement le lockscreen !</li>
</ul>
<p>Tant que j&#8217;y suis, PhoneApplicationService contient une autre propriété intéressante : <em>Microsoft.Phone.Shell.PhoneApplicationService.Current.StartupMode</em>, qui permet de savoir si vous êtes dans une nouvelle instance de l&#8217;application ou bien si vous êtes réssucité d&#8217;un état tombstonné.</p>
<p><em>[English version below]</em></p>
<p><span id="more-47"></span></p>
<p>English version : <strong>Disable Windows Phone 7&#8242;s lock screen</strong></p>
<p><strong><span style="font-weight: normal;"><br />
Windows Phone 7 does not allows multitasking for 3rd-party developpers, but I think you already know about that. But say you&#8217;re looking to develop an app that keeps the phone busy for a while, without requesting any user interaction (what could have been a background thread on WM6.5 or Android, but that&#8217;s another topic&#8230;) : you&#8217;re going to have a problem, within some time the phone will go to standby mode, and your app is going to be tombstonned.</span></strong></p>
<p>That could be a problem if you&#8217;re developping a music/radio/video app (even though the fact that you should use a MediaElement, and it&#8217;s smart enough to disable to lockscreen while a media is played), or a GPS tracking app (#ridetracker, more to come soon on this blog).</p>
<p>Well, you can solve this problem by using one of the following</p>
<ul>
<li><strong><em>Microsoft.Phone.Shell.PhoneApplicationService.Current.ApplicationIdleDetectionMode = Microsoft.Phone.Shell.IdleDetectionMode.Disabled</em></strong><br />
The shell won&#8217;t kill your process while the lockscreen is on. That&#8217;s the closest behavior to a background thread.</li>
<li><strong><em>Microsoft.Phone.Shell.PhoneApplicationService.Current.UserIdleDetectionMode = Microsoft.Phone.Shell.IdleDetectionMode.Disabled</em></strong><br />
This one will simply disable the lockscreen !</li>
</ul>
<p>And while I&#8217;m at it, there&#8217;s another interesting item in PhoneApplicationService : <em>Microsoft.Phone.Shell.PhoneApplicationService.Current.StartupMode</em> which value tells your application is a fresh instance or bought back to life from tombstonning.</p>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2010/10/desactiver-le-lock-screen-sous-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SL/WP7] Snippet nprop</title>
		<link>http://ree7.fr/blog/2010/08/slwp7-snippet-nprop/</link>
		<comments>http://ree7.fr/blog/2010/08/slwp7-snippet-nprop/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 18:00:37 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Dev']]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[mvvm]]></category>
		<category><![CDATA[NotifyPropertyChanged]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windows phone 7]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=35</guid>
		<description><![CDATA[
Avouez-le, vous en avez plein vos DataContext, des propriétés bêtes et méchantes qui font appel à une fonction NotifyPropertyChanged. [ Pour ceux du fond près du radiateur, dans une UI Silverlight, l'objet contexte de la page, s'il implémente INotifyPropertyChanged, possède un event  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ree7.fr/blog/wp-content/uploads/2010/08/nprop.png"><img class="aligncenter size-full wp-image-36" title="Snippet nprop" src="http://ree7.fr/blog/wp-content/uploads/2010/08/nprop.png" alt="" width="544" height="239" /></a><br />
Avouez-le, vous en avez plein vos DataContext, des propriétés bêtes et méchantes qui font appel à une fonction NotifyPropertyChanged. [ Pour ceux du fond près du radiateur, dans une UI Silverlight, l'objet contexte de la page, s'il implémente INotifyPropertyChanged, possède un event PropertyChanged qui permet de signifier à Silverlight que de la valeur d'une propriété à changé et qu'il est temps de mettre à jour les éléments de l'UI attachés à cette propriété. ]</p>
<p>Nativement, dans Visual Studio nous avons à notre disposition <strong>prop</strong> et <strong>propdp</strong>, bien utiles dans la vie de tous les jours du développeur Silverlight pour créer propriétés et <em>DependencyProperties </em>sans trop avoir à taper du code purement répétitif. Par contre rien pour les propriétés déclenchant l&#8217;évènement <em>PropertyChanged </em>- sans doute car l&#8217;implémentation concrète d&#8217;<em>INotifyPropertyChange</em>d est laissée au développeur&#8230; bien que l&#8217;on fasse quasiement tous pareil.</p>
<p>Pour palier à ce manque je vous propose <strong>nprop, </strong>un snippet venant s&#8217;ajouter à votre IDE et qui vous permettra du temps dans vos développements <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Elle s&#8217;utilise comme n&#8217;importe quel autre snippet, tapez juste nprop puis TAB et le code apparaitra en vous invitant à remplir les trous.</p>
<ul>
<li><a href="http://ree7.fr/files/nprop/1_0_0/nprop.vsi">Fichier d&#8217;installation automatique .vsi</a></li>
<li><a href="http://ree7.fr/files/nprop/1_0_0/nprop.snippet">Fichier snippet nu</a> à placer dans votre dossier <em>%Documents%\Visual Studio 20xx\Code Snippets\Visual C#\My Code Snippets</em> au cas où le fichier précédent poserait problème</li>
</ul>
<div><span class="Apple-style-span" style="line-height: 19px;"><strong>UPDATE :</strong> Toujours pas fan du snippet fourni avec MVVM Light, j&#8217;ai un petit peu retouché nprop depuis le temps, dont voici la <strong><a href="http://ree7.fr/files/nprop/1_0_1/nprop.snippet">dernière version</a></strong></span></div>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2010/08/slwp7-snippet-nprop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WP7] Missing CheckAccess()</title>
		<link>http://ree7.fr/blog/2010/05/wp7-missing-checkaccess/</link>
		<comments>http://ree7.fr/blog/2010/05/wp7-missing-checkaccess/#comments</comments>
		<pubDate>Mon, 10 May 2010 07:06:18 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[checkaccess]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=30</guid>
		<description><![CDATA[Une petite note technique pour ceux qui se demandaient où était passée Dispatcher.CheckAccess() dans les CTP de Windows Phone 7.
Cette primitive permet de savoir si le code courant tourne dans le thread d&#8217;UI ou pas, et donc si un BeginInvoke() est nécessaire ou pas.
Exemple, pour récupérer un  [...]]]></description>
			<content:encoded><![CDATA[<p>Une petite note technique pour ceux qui se demandaient où était passée Dispatcher.CheckAccess() dans les CTP de Windows Phone 7.</p>
<p>Cette primitive permet de savoir si le code courant tourne dans le thread d&#8217;UI ou pas, et donc si un BeginInvoke() est nécessaire ou pas.</p>
<p>Exemple, pour récupérer un setting de l&#8217;IsolatedStorage depuis n&#8217;importe quel thread :</p>
<pre class="brush: csharp; title: ; notranslate">
public void GetSetting(string key, out object value)
        {
            if (Deployment.Current.Dispatcher.CheckAccess())
            {
                value = IsolatedStorageSettings.ApplicationSettings[key];
            }
            else
            {
                using (ManualResetEvent sync = new ManualResetEvent(false))
                {
                    object _value = null;

                    Deployment.Current.Dispatcher.BeginInvoke(() =&gt;
                        {
                            _value = IsolatedStorageSettings.ApplicationSettings[key];
                            sync.Set();
                        });

                    sync.WaitOne();
                    value = _value;
                }
            }
        }
</pre>
<p>Et bien CheckAccess() est toujours bien là dans la classe Dispatcher, même si l&#8217;Intellisense de Visual Studio ne vous la propose pas.</p>
<p><strong>Rappel : </strong>Pour les débutants en multi-threading sous Silverlight, le seul Dispatcher auquel vous avez accès depuis un autre thread que l&#8217;UI est Deployment.Current.Dispatcher. Si vous essayez de taper directement dans le Dispatcher d&#8217;un FrameworkElement vous irez tout droit à la CrossThreadException <img src='http://ree7.fr/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>Source : <a href="http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/59d4b3ff-8944-4b63-a406-ab2011188be6/?prof=required">Forums MSDN</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2010/05/wp7-missing-checkaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ready-made usual flavour HttpWebRequest for Windows Phone 7</title>
		<link>http://ree7.fr/blog/2010/04/ready-made-usual-flavour-httpwebrequest-for-windows-phone-7/</link>
		<comments>http://ree7.fr/blog/2010/04/ready-made-usual-flavour-httpwebrequest-for-windows-phone-7/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 20:54:28 +0000</pubDate>
		<dc:creator>Pierre Belin</dc:creator>
				<category><![CDATA[Sources]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[getresponse]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[webrequest]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://ree7.fr/blog/?p=22</guid>
		<description><![CDATA[Si vous effectuez des portages d&#8217;applications .NET vers Silverlight ou Windows Phone 7, cette classe pourrait bien vous être utile.
En effet, dans Silverlight, les WebRequests sont asynchrones (c&#8217;est très bien !), seulement ce changement d&#8217;API peut causer de nombreuses modifications de code. C&#8217;est  [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous effectuez des portages d&#8217;applications .NET vers Silverlight ou Windows Phone 7, cette classe pourrait bien vous être utile.<br />
En effet, dans Silverlight, les WebRequests sont asynchrones (c&#8217;est très bien !), seulement ce changement d&#8217;API peut causer de nombreuses modifications de code. C&#8217;est dans cette optique que j&#8217;ai crée cette classe C# : HttpWebRequestSync qui propose une interface au plus proche de ce qui existait avant.</p>
<p>Attention, pour le coup vous perdrez l&#8217;avantage des requêtes asynchrones et votre thread appelant sera bloqué pendant le déroulement de la requête, comme au bon vieux temps !<br />
Tout retour de bug ou message de remerciement est le bienvenu, ce code est disponible sous licence LGPL.</p>
<p><em>If you&#8217;re looking forward to port .NET applications to Silverlight/Windows Phone 7, the following might interest you.<br />
In Silverlight, the WebRequests are asynchronous (and that&#8217;s a good thing), but this change in the API can cause numerous changes in your code. That&#8217;s what lead me to write this C# class : HttpWebRequestSync featuring an interface as close as possible as what was there before.</em></p>
<p><em>Note that you&#8217;ll lose the advantage of asynchronous requests and that you&#8217;re thread will be locked waiting for the request to complete, ol&#8217;school style.<br />
If you find any bug or just want to leave a &#8216;thank you&#8217; not you&#8217;re welcome. This code is available under the LGPL license.</em></p>
<p><span id="more-22"></span></p>
<pre class="brush: csharp; title: ; notranslate">/**********************************************************
 * HttpWebRequestSync.cs
 * Provides an implementation close to the .NET CF (3.5)
 * synchronous HttpWebRequest with Windows Phone 7's
 * asynchronous implementation.
 * TL;DR : Abstract the dev from all the async callback.
 *
 * Written by : Pierre BELIN &lt;pierre.belin@inbox.com&gt;
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the Lesser GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the Lesser GNU General Public License
 * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
 *
 **********************************************************/
using System;
using System.Net;
using System.Threading;
using System.IO;

namespace Ree7.Utils.Net
{
 public class HttpWebRequestSync
 {
 private ManualResetEvent getRequestDone = new ManualResetEvent(false);
 private ManualResetEvent getResponseDone = new ManualResetEvent(false);
 private HttpWebRequest request;

 private HttpWebResponse response;
 private Stream requestStream;

 /// &lt;summary&gt;
 /// Private ctor, to get an HttpWebRequestSync you shall use Create()
 /// &lt;/summary&gt;
 private HttpWebRequestSync()
 {

 }

 /// &lt;summary&gt;
 /// Initializes a new HttpWebRequestSync for the specified URI scheme
 /// &lt;/summary&gt;
 public static HttpWebRequestSync Create(string url)
 {
 return Create(new Uri(url));
 }

 /// &lt;summary&gt;
 /// Initializes a new HttpWebRequestSync for the specified URI scheme
 /// &lt;/summary&gt;
 public static HttpWebRequestSync Create(Uri uri)
 {
 HttpWebRequestSync wrs = new HttpWebRequestSync();
 wrs.request = (HttpWebRequest)WebRequest.Create(uri);

 return wrs;
 }

 #region HttpWebRequest Interface
 /// &lt;summary&gt;
 /// Summary:
 ///     Gets or sets the value of the Accept HTTP header.
 ///
 /// Returns:
 ///     The value of the Accept HTTP header. The default value is null.
 /// &lt;/summary&gt;
 public string Accept
 {
 get
 {
 return request.Accept;
 }
 set
 {
 request.Accept = value;
 }
 }
 /// &lt;summary&gt;
 /// Not Implemented Yet
 /// &lt;/summary&gt;
 public int ContentLength
 {
 get
 {
 return 0;
 }
 set
 {
 return;
 }
 }
 /// &lt;summary&gt;
 /// Summary:
 ///     Gets or sets the value of the Content-type HTTP header.
 ///
 /// Returns:
 ///     The value of the Content-type HTTP header. The default value is null.
 /// &lt;/summary&gt;
 public string ContentType
 {
 get
 {
 return request.ContentType;
 }
 set
 {
 request.ContentType = value;
 }
 }
 /// &lt;summary&gt;
 /// Summary:
 ///     Specifies the collection of System.Net.CookieCollection objects associated
 ///     with the HTTP request.
 ///
 /// Returns:
 ///     A System.Net.CookieContainer that contains a collection of System.Net.CookieCollection
 ///     objects associated with the HTTP request.
 ///
 /// Exceptions:
 ///   System.NotImplementedException:
 ///     This property is not implemented.
 /// &lt;/summary&gt;
 public CookieContainer CookieContainer
 {
 get
 {
 return request.CookieContainer;
 }
 set
 {
 request.CookieContainer = value;
 }
 }
 /// &lt;summary&gt;
 /// Summary:
 ///     Gets a value that indicates whether a response has been received from an
 ///     Internet resource.
 ///
 /// Returns:
 ///     true if a response has been received; otherwise, false.
 ///
 /// Exceptions:
 ///   System.NotImplementedException:
 ///     This property is not implemented.
 /// &lt;/summary&gt;
 public bool HaveResponse
 {
 get
 {
 return request.HaveResponse;
 }
 }
 /// &lt;summary&gt;
 /// Returns the underlying HttpWebRequest (handle it with care)
 /// &lt;/summary&gt;
 public HttpWebRequest HttpWebRequest
 {
 get
 {
 return request;
 }
 }
 /// &lt;summary&gt;
 /// Summary:
 ///     Specifies a collection of the name/value pairs that make up the HTTP headers.
 ///
 /// Returns:
 ///     A System.Net.WebHeaderCollection that contains the name/value pairs that
 ///     make up the headers for the HTTP request.
 ///
 /// Exceptions:
 ///   System.InvalidOperationException:
 ///     The request has been started by calling the System.Net.HttpWebRequest.BeginGetRequestStream

(System.AsyncCallback,System.Object)
 ///     or System.Net.HttpWebRequest.BeginGetResponse(System.AsyncCallback,System.Object)
 ///     method.
 /// &lt;/summary&gt;
 public WebHeaderCollection Headers
 {
 get
 {
 return request.Headers;
 }
 set
 {
 request.Headers = value;
 }
 }
 /// &lt;summary&gt;
 /// Summary:
 ///     Gets or sets the method for the request.
 ///
 /// Returns:
 ///     The request method to use to contact the Internet resource. The default value
 ///     is GET.
 ///
 /// Exceptions:
 ///   System.ArgumentException:
 ///     No method is supplied.-or- The method string contains invalid characters.
 ///
 ///   System.NotImplementedException:
 ///     This property is not implemented.
 ///
 ///   System.NotSupportedException:
 ///     The System.Net.HttpWebRequest.Method property is not GET or POST.
 /// &lt;/summary&gt;
 public string Method
 {
 get
 {
 return request.Method;
 }
 set
 {
 request.Method = value;
 }
 }
 /// &lt;summary&gt;
 /// Summary:
 ///     Gets the original Uniform Resource Identifier (URI) of the request.
 ///
 /// Returns:
 ///     A System.Uri that contains the URI of the Internet resource passed to the
 ///     System.Net.WebRequest.Create(System.Uri) method.
 ///
 /// Exceptions:
 ///   System.NotImplementedException:
 ///     This property is not implemented.
 /// &lt;/summary&gt;
 public Uri RequestUri
 {
 get
 {
 return request.RequestUri;
 }
 }
 #endregion

 public Stream GetRequestStream()
 {
 // start the asynchronous operation
 request.AllowReadStreamBuffering = false;
 request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

 // Keep the main thread from continuing while the asynchronous
 // operation completes. A real world application
 // could do something useful such as updating its user interface.
 getRequestDone.WaitOne();

 Stream result = requestStream;

 // Avoid keeping an unnecessary ref on the stream in this object
 requestStream = null;

 return result;
 }

 private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
 {
 request = (HttpWebRequest)asynchronousResult.AsyncState;
 requestStream = request.EndGetRequestStream(asynchronousResult);

 getRequestDone.Set();
 }

 public HttpWebResponse GetResponse()
 {
 // Start the asynchronous operation to get the response
 request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);

 getResponseDone.WaitOne();

 HttpWebResponse result = response;

 // Avoid keeping an unnecessary ref on the response in this object
 response = null;

 return result;
 }

 private void GetResponseCallback(IAsyncResult asynchronousResult)
 {
 request = (HttpWebRequest)asynchronousResult.AsyncState;

 // End the operation
 response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

 getResponseDone.Set();
 }

 }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://ree7.fr/blog/2010/04/ready-made-usual-flavour-httpwebrequest-for-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

