<?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>Manitra.net &#187; C#</title>
	<atom:link href="http://www.manitra.net/blog/category/dev/csharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.manitra.net/blog</link>
	<description>Ideas on C# .NET</description>
	<lastBuildDate>Wed, 01 Feb 2012 13:45:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Sweet DevTools</title>
		<link>http://www.manitra.net/blog/dev/csharp/sweet-devtools/</link>
		<comments>http://www.manitra.net/blog/dev/csharp/sweet-devtools/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 20:38:23 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=301</guid>
		<description><![CDATA[I just published few online tools for developers at devtools.manitra.net and I hope they will allow you to save time. The widgets currently available are : Guid generator Timestamp Converter Browser Information Text transformation (html entity, url encode, base64encode &#8230;) Regex tester Those tools already exist on the web but the key stuffs here is [...]]]></description>
			<content:encoded><![CDATA[<p>I just published few <a href="http://devtools.manitra.net">online tools</a> for developers at <a href="http://devtools.manitra.net">devtools.manitra.net</a> and I hope they will allow you to save time. The widgets currently available are :</p>
<ul>
<li><a href="http://devtools.manitra.net/Pages/Guid/">Guid generator</a></li>
<li><a href="http://devtools.manitra.net/Pages/TimeStamp/">Timestamp Converter</a></li>
<li><a href="http://devtools.manitra.net/Pages/BrowserInfo/">Browser Information</a></li>
<li><a href="http://devtools.manitra.net/Pages/TextTransform/">Text transformation</a> (html entity, url encode, base64encode &#8230;)</li>
<li><a href="http://devtools.manitra.net/Pages/RegexTester/">Regex tester</a></li>
</ul>
<p>Those tools already exist on the web but the key stuffs here is that they are :</p>
<ul>
<li>tiny (minimalist web page without blabla about what a base64 encoding is etc ..)</li>
<li>embeddable as widget</li>
<li>free and ad-free</li>
</ul>
<p>By the way, they are best used within a <a href="http://www.netvibes.com">netvibes dashboard</a> (Web Page Widget).</p>
<p>Enjoy <img src='http://www.manitra.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/csharp/sweet-devtools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to create deeply nested Asp.net Dynamic Controls ?</title>
		<link>http://www.manitra.net/blog/dev/csharp/how-to-create-deeply-nested-asp-net-dynamic-controls/</link>
		<comments>http://www.manitra.net/blog/dev/csharp/how-to-create-deeply-nested-asp-net-dynamic-controls/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 20:02:08 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=211</guid>
		<description><![CDATA[Creating controls at runtime (dynamic controls) in Asp.net is both tricky and unintuitive. This article will explain a pattern to make it easier. 

The main advantages of this strategy  are :
- ability to create deeply nested controls with unlimited depth
- each dynamicaly created controls have normal states (Viewstate is not broken)
- you can create those controls whenever you want (including OnClick events, PreRender and Render phases)
- no hacks with postback arguments are required]]></description>
			<content:encoded><![CDATA[<p>Creating controls at runtime (dynamic controls) in Asp.net is both tricky and unintuitive. This article will explain a pattern to make it easier. </p>
<p>The main advantages of this strategy  are :<br />
- ability to create deeply nested controls with unlimited depth<br />
- each dynamicaly created controls have normal states (Viewstate is not broken)<br />
- you can create those controls whenever you want (including OnClick events, PreRender and Render phases)<br />
- no hacks with postback arguments are required</p>
<blockquote><p>[UPDATE (2011/08/01)] : &#8220;M&#8221; found that the PersistentPanel doesn&#8217;t work well when it is instantiated in a markup file (aspx/ascx/master &#8230;) so I would advice you to instanciate it via code in the CreateChildControl method. The source code in the bottom of the page have been updated to reflect that.</p></blockquote>
<h3>The online demo</h3>
<p>To help you understand what am I talking about here is an online example of deeply nested and dynamically created controls using Asp.Net.<br />
<iframe style="border: 0px; width: 95%; height: 400px;"  src="http://web.manitra.net/dev/Manitra.DynamicControl/complex.aspx"></iframe><br />
You can create as much nested controls as you want and test that each controls persists its state upon postbacks. </p>
<h3>The implementation</h3>
<h4>The PersistentPanel</h4>
<p>The PersistentPanel is just a Panel wich persists its child controls collection using the viewstate automatically. This is a key control because it recreates the dynamically created controls on each post back during the right life-cycle phase : OnLoadViewstate.  Thanks to this early recreation, those controls can persist their state in the ViewState like any controls declared in the markup page during the design time.</p>
<p>This kind of component is quite common now a days but the particularity here is that I do not try to persits all the nested controls but only the direct children. Indeed, if you try to persist and recreate the whole hierarchy, you&#8217;ll encounter problems and will have to handle a lot of special cases. More over since event handlers are not persisted, the restored components wont work. </p>
<p>The implementation process of the PersitentPanel  :</p>
<ul>
<li>during the save process of the viewstate we save the control hierarchy (type+Id only) using a serializable entity that store the control type, its Id and and a list of children</li>
<li>during the restore process of the viewstate we refill the Controls collection using the previously saved control hierarchy</li>
</ul>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">class</span> PersistentPanel <span class="sy0">:</span> Panel</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw4">string</span> ControlsViewStateKey <span class="sy0">=</span> <span class="st0">&quot;Controls&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">int</span> MaxDepth</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var value <span class="sy0">=</span> ViewState<span class="br0">&#91;</span><span class="st0">&quot;MaxDepth&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>value <span class="sy0">!=</span> <span class="kw1">null</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>value;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ViewState<span class="br0">&#91;</span><span class="st0">&quot;MaxDepth&quot;</span><span class="br0">&#93;</span> <span class="sy0">=</span> value;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">override</span> <span class="kw1">void</span> LoadViewState<span class="br0">&#40;</span><span class="kw4">object</span> savedState<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">base</span>.<span class="me1">LoadViewState</span><span class="br0">&#40;</span>savedState<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var persisted <span class="sy0">=</span> <span class="br0">&#40;</span>ControlEntity<span class="br0">&#41;</span>ViewState<span class="br0">&#91;</span>ControlsViewStateKey<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>persisted <span class="sy0">!=</span> <span class="kw1">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>var child <span class="kw1">in</span> persisted.<span class="me1">Children</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Controls.<span class="me1">Add</span><span class="br0">&#40;</span>child.<span class="me1">ToControl</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">override</span> <span class="kw4">object</span> SaveViewState<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ViewState<span class="br0">&#91;</span>ControlsViewStateKey<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">new</span> ControlEntity<span class="br0">&#40;</span><span class="kw1">this</span>, MaxDepth<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var result <span class="sy0">=</span> <span class="kw1">base</span>.<span class="me1">SaveViewState</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> result;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h4>The parent of the dynamic controls</h4>
<p>The component wich will dynamicaly create the controls will first embed a PersistentPanel. And each time it will want to add a control it will add that control in the PersistentPanel&#8217;s controls collection. Here is an example :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw4">class</span> CustomerView <span class="sy0">:</span> Page <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> PersistentPanel ctlPanel;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// &#8212;&#8212; //</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">void</span> ctlAdd_click<span class="br0">&#40;</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ctlPanel.<span class="me1">Controls</span>.<span class="me1">Add</span><span class="br0">&#40;</span><span class="kw3">new</span> Textbox<span class="br0">&#123;</span>Text<span class="sy0">=</span>Datetime.<span class="me1">Now</span>.<span class="me1">ToString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h4>Combining both to build a hierarchical data editor</h4>
<p>Now we have a persistant panel and know that dynamically created controls are persisted, we&#8217;ll create a control that would create other complexes controls wich will have the same type as their creator. This would give us a powerfull control that would be able to display or edit hierarchical data wich, in our case, is a filter expression. We&#8217;ll have<br />
- a control to edit scalar filter<br />
- a control to edit composite filter<br />
The scalar filter will just contain 3 simple controls for the field name, the operator and the value. The composite filter editor will be the interesting one. Indeed, it&#8217;s gonna contains a variable number of scalar editor and other composite filter editor. So it will use a persistant panel to host those nested controls. And that&#8217;s it !</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw4">class</span> compositeView <span class="sy0">:</span> WebControl, INamingContainer</div>
</li>
</ol>
</div>
<h3>Conclusion</h3>
<p>The important things to remember are that :<br />
- a control can be created at anytime, but it must be recreated on each postback during/before the LoadViewState of its container<br />
- the ID of the dynamic control must be the same<br />
- event handlers are not persisted, you have to rewire them up on each postback, the PersistantPanel has the ControlRestored event wich is the best place to do so.</p>
<h3>Download the source code</h3>
<p>The online demo application is available here : </p>
<ul>
<li><a href='http://www.manitra.net/blog/wp-content/uploads/2010/09/Manitra.DynamicControl.zip'>Manitra.DynamicControl.zip (source code)</a></li>
<li><a target="_blank" href="http://web.manitra.net/dev/Manitra.DynamicControl/complex.aspx">http://web.manitra.net/dev/Manitra.DynamicControl/complex.aspx</a></li>
</ul>
<p>Have fun !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/csharp/how-to-create-deeply-nested-asp-net-dynamic-controls/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Concise C# Part 3 : C# 3 shortcuts</title>
		<link>http://www.manitra.net/blog/dev/csharp/concise-c-part-3-c-3-shortcuts/</link>
		<comments>http://www.manitra.net/blog/dev/csharp/concise-c-part-3-c-3-shortcuts/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 21:27:06 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=158</guid>
		<description><![CDATA[The version 3 of C# brings us a lot of syntactic sugar to reduce the length of our code. Here are some of them. This post is part of a serie about making C# code shorter. Part 1 : Extension methods and Linq Part 2 : Try Catch and reusability Part 3 : C# 3 [...]]]></description>
			<content:encoded><![CDATA[<p>The version 3 of C# brings us a lot of syntactic sugar to reduce the length of our code. Here are some of them.</p>
<p>This post is part of a serie about making C# code shorter.</p>
<ul>
<li><a href="/blog/?p=48">Part 1 : Extension methods and Linq</a></li>
<li><a href="/blog/?p=147">Part 2 : Try Catch and reusability</a></li>
<li><a href="/blog/?p=158"><strong>Part 3 : C# 3 shortcuts</strong></a></li>
<li>Part 4 : Chainable methods</li>
<li>Part 5 : Parsing and conversion</li>
<li>Part 6 : Contructor with initializer and event setters</li>
<li>Part 7 : Post compilation</li>
</ul>
<h3>Constructors with Property initializers</h3>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1">Post value <span class="sy0">=</span> <span class="kw3">new</span> Post<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">value.<span class="me1">Title</span> <span class="sy0">=</span> <span class="st0">&quot;New Version For C#&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">value.<span class="me1">CreatedOn</span> <span class="sy0">=</span> DateTime.<span class="me1">Now</span>;</div>
</li>
<li class="li1">
<div class="de1">CreatePost<span class="br0">&#40;</span>value<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1">CreatePost<span class="br0">&#40;</span><span class="kw3">new</span> Post</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Title <span class="sy0">=</span> <span class="st0">&quot;NewVersion For C#&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CreatedOn <span class="sy0">=</span> DateTime.<span class="me1">Now</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Collection initializers</h3>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1">var names <span class="sy0">=</span> <span class="kw3">new</span> List<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">names.<span class="me1">Add</span><span class="br0">&#40;</span><span class="st0">&quot;manitra&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">names.<span class="me1">Add</span><span class="br0">&#40;</span><span class="st0">&quot;yeah&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">SaveNames<span class="br0">&#40;</span>names<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1">SaveNames<span class="br0">&#40;</span><span class="kw3">new</span> List<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> <span class="br0">&#123;</span> <span class="st0">&quot;manitra&quot;</span>, <span class="st0">&quot;yeah&quot;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Var keyword</h3>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1">Dictionary<span class="sy0">&lt;</span><span class="kw4">string</span>, List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;&gt;</span> result <span class="sy0">=</span> <span class="kw3">new</span> Dictionary<span class="sy0">&lt;</span><span class="kw4">string</span>, List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet (But still strongly typed)</span></div>
</li>
<li class="li1">
<div class="de1">var result <span class="sy0">=</span> <span class="kw3">new</span> Dictionary<span class="sy0">&lt;</span><span class="kw4">string</span>, List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Automatic properties</h3>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Post</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">string</span> title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">string</span> description;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> DateTime createdOn;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Title</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; get</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">title</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; set</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">title</span> <span class="sy0">=</span> value;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Description</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; get</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">description</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; set</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">description</span> <span class="sy0">=</span> value;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw5">System</span>.<span class="me1">DateTime</span> CreatedOn</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; get</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">createdOn</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; set</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">createdOn</span> <span class="sy0">=</span> value;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Post</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Title <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Description <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> DateTime CreatedOn <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/csharp/concise-c-part-3-c-3-shortcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concise C# Part 2 : Try Catch and reusability</title>
		<link>http://www.manitra.net/blog/dev/csharp/concise-c-part-2-try-catch-and-reusability/</link>
		<comments>http://www.manitra.net/blog/dev/csharp/concise-c-part-2-try-catch-and-reusability/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 22:03:20 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=147</guid>
		<description><![CDATA[Exception handling is an important part of any software. In this post, I will talk about a trick to make but some kind of reusability on exception handling. This post is part of a serie about making C# code shorter Part 1 : Extension methods and Linq Part 2 : Try Catch and reusability Part [...]]]></description>
			<content:encoded><![CDATA[<p>Exception handling is an important part of any software. In this post, I will talk about a trick to make but some kind of reusability on exception handling.</p>
<p>This post is part of a serie about making C# code shorter</p>
<ul>
<li><a href="/blog/?p=48">Part 1 : Extension methods and Linq</a></li>
<li><a href="/blog/?p=147"><strong>Part 2 : Try Catch and reusability</strong></a></li>
<li><a href="/blog/?p=158">Part 3 : C# 3 shortcuts</a></li>
<li>Part 4 : Chainable methods</li>
<li>Part 5 : Parsing and conversion</li>
<li>Part 6 : Contructor with initializer and event setters</li>
<li>Part 7 : Post compilation</li>
</ul>
<p>When you write code, you usually try to reuse your code by creating methods and calling those methods each time you the need their functionality. When working with exceptions, it&#8217;s a bit tricky because, they don&#8217;t follow the normal code flow, they jump out of your method &#8230; unless you catch them. The consequence is that you usually have multiple similar try {} catch {} blocks that are often copied and pasted. </p>
<h3>This is what usually happens</h3>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">void</span> Method1<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//method 1 content</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>ThreadAbortException<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>IOException ex<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//IO exception handling</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add any code for releasing ressource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">void</span> Method2<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//method 2 content</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>ThreadAbortException<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>IOException ex<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//IO exception handling</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add any code for releasing ressource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The solution to reuse the exception block</h3>
<p>This is what you could do to reuse the same error handling code block in c# :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">void</span> Method1<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Do</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">=&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//method 1 content</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">void</span> Method2<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Do</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">=&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//method 2 content</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">protected</span> <span class="kw1">void</span> <span class="kw1">Do</span><span class="br0">&#40;</span>Action method<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//code to call before each methods</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; method<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//code to call after each methods success</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>ThreadAbortException<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>IOException ex<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//IO exception handling</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add any code for releasing ressource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/csharp/concise-c-part-2-try-catch-and-reusability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concise C# Part 1 : Extension methods and Linq</title>
		<link>http://www.manitra.net/blog/dev/csharp/concise-c-part-1-extension-methods-and-linq/</link>
		<comments>http://www.manitra.net/blog/dev/csharp/concise-c-part-1-extension-methods-and-linq/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 20:44:24 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=48</guid>
		<description><![CDATA[Because, short code is easier to understand, I decided to publish some posts about making C# code shorter. I&#8217;ll talk about small tricks I use to significantly reduce the amount of code I write to achieve my goals. Some people don&#8217;t agree with that idea because there has been abuses done by perl and c [...]]]></description>
			<content:encoded><![CDATA[<p>Because, short code is easier to understand, I decided to publish some posts about making C# code shorter. I&#8217;ll talk about small tricks I use to significantly reduce the amount of code I write to achieve my goals. Some people don&#8217;t agree with that idea because there has been abuses done by perl and c programmer in the past. I think that, if you use correct names for methods, variable and types, the shortest code will still be easy to understand.</p>
<p>This post is part of a serie about making C# code shorter</p>
<ul>
<li><a href="/blog/?p=48"><strong>Part 1 : Extension methods and Linq</strong></a></li>
<li><a href="/blog/?p=147">Part 2 : Try Catch and reusability</a></li>
<li><a href="/blog/?p=158">Part 3 : C# 3 shortcuts</a></li>
<li>Part 4 : Chainable methods</li>
<li>Part 5 : Parsing and conversion</li>
<li>Part 6 : Contructor with initializer and event setters</li>
<li>Part 7 : Post compilation</li>
</ul>
<p>In this post, I&#8217;ll use the following class for my examples :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Post</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">int</span> Id <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Author <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Title <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">string</span> Content <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Linq extension methods</h3>
<p>Linq is a set of contracts (interfaces) wich allow the developper to request objects from a data store. What make it unique is that :<br />
- the query language is strongly typed (at compile time you are sure that all column names et types are corrects and that there are no missin semi-colon<br />
- it supports unlimited data store type (including all database systems, xml files, google data, twitter posts,  in memory objects &#8230;)</p>
<p>I&#8217;ll focus primarily on Linq to Objects (in memory object) because we&#8217;re talking about making code concise. So here are the shortcuts !</p>
<h4>Searching an unique element in a collection</h4>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> Post GetById<span class="br0">&#40;</span><span class="kw4">int</span> id, IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> posts.<span class="me1">FirstOrDefault</span><span class="br0">&#40;</span>p <span class="sy0">=&gt;</span> p.<span class="me1">Id</span> <span class="sy0">==</span> id<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> Post GetById<span class="br0">&#40;</span><span class="kw4">int</span> id, IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>Post current <span class="kw1">in</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>current.<span class="me1">Id</span> <span class="sy0">==</span> id<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> current;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h4>Filtering a collection</h4>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> FindByAuthor<span class="br0">&#40;</span><span class="kw4">string</span> author, IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> posts.<span class="me1">Where</span><span class="br0">&#40;</span>p <span class="sy0">=&gt;</span> p.<span class="me1">Author</span> <span class="sy0">==</span> author<span class="br0">&#41;</span>.<span class="me1">ToList</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> FindByAuthor<span class="br0">&#40;</span><span class="kw4">string</span> author, IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> result <span class="sy0">=</span> <span class="kw3">new</span> List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>Post current <span class="kw1">in</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>current.<span class="me1">Author</span> <span class="sy0">==</span> author<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">Add</span><span class="br0">&#40;</span>current<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> result;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h4>Selecting a column (one property of an object collection)</h4>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> IList<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> ExtractTitles<span class="br0">&#40;</span>IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> posts.<span class="me1">Select</span><span class="br0">&#40;</span>p <span class="sy0">=&gt;</span> p.<span class="me1">Title</span><span class="br0">&#41;</span>.<span class="me1">ToList</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> IList<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> ExtractTitles<span class="br0">&#40;</span>IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; List<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> result <span class="sy0">=</span> <span class="kw3">new</span> List<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>Post current <span class="kw1">in</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">Add</span><span class="br0">&#40;</span>current.<span class="me1">Title</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> result;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h4>Apply changes to a collection</h4>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Concise and Sweet</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> Anonymize<span class="br0">&#40;</span>IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> posts.<span class="me1">Select</span><span class="br0">&#40;</span>p <span class="sy0">=&gt;</span> <span class="kw3">new</span> Post</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Id <span class="sy0">=</span> p.<span class="me1">Id</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Title <span class="sy0">=</span> p.<span class="me1">Title</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Author <span class="sy0">=</span> <span class="st0">&quot;***&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Content <span class="sy0">=</span> p.<span class="me1">Content</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">ToList</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Verbose and Ugly</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> Anonymize<span class="br0">&#40;</span>IList<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span> result <span class="sy0">=</span> <span class="kw3">new</span> List<span class="sy0">&lt;</span>Post<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>Post current <span class="kw1">in</span> posts<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Post anonymousPost <span class="sy0">=</span> <span class="kw3">new</span> Post<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; anonymousPost.<span class="me1">Id</span> <span class="sy0">=</span> current.<span class="me1">Id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; anonymousPost.<span class="me1">Title</span> <span class="sy0">=</span> current.<span class="me1">Title</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; anonymousPost.<span class="me1">Author</span> <span class="sy0">=</span> <span class="st0">&quot;***&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; anonymousPost.<span class="me1">Content</span> <span class="sy0">=</span> current.<span class="me1">Content</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">Add</span><span class="br0">&#40;</span>anonymousPost<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> result;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Creating your own extension methods</h3>
<p>Extension methods are the best candidates when you plan to build your very own low level toolset. Here are some examples to give you an idea.</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">class</span> MyExtensions</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//Index a collection by its key</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> IDictionary<span class="sy0">&lt;</span>TKey, TObject<span class="sy0">&gt;</span> IndexBy<span class="sy0">&lt;</span>TObject, TKey<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw1">this</span> IEnumerable<span class="sy0">&lt;</span>TObject<span class="sy0">&gt;</span> target, Func<span class="sy0">&lt;</span>TObject, TKey<span class="sy0">&gt;</span> keyExtractor<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; var result <span class="sy0">=</span> <span class="kw3">new</span> Dictionary<span class="sy0">&lt;</span>TKey, TObject<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>var current <span class="kw1">in</span> target<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result<span class="br0">&#91;</span>keyExtractor<span class="br0">&#40;</span>current<span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy0">=</span> current;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> result;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//Joining any collection of string (array, list, enumerable &#8230;)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">string</span> Join<span class="br0">&#40;</span><span class="kw1">this</span> IEnumerable<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> elements, <span class="kw4">string</span> separator<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw4">string</span>.<span class="me1">Join</span><span class="br0">&#40;</span>separator, elements.<span class="me1">ToArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/csharp/concise-c-part-1-extension-methods-and-linq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asynchronous tasks on Winform</title>
		<link>http://www.manitra.net/blog/dev/asynchronous-tasks-on-winforms/</link>
		<comments>http://www.manitra.net/blog/dev/asynchronous-tasks-on-winforms/#comments</comments>
		<pubDate>Mon, 11 May 2009 00:33:51 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[WinForm]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=32</guid>
		<description><![CDATA[This article talks about asynchronous programming within .NET Windows form applications.]]></description>
			<content:encoded><![CDATA[<h3>The problem</h3>
<p>When you create winform applications, doing tasks in the background is essential to avoid user frustation. Unfortunatly, it could make you write a lot more code. Here are some utility methods that reduce the complexity of asynchronous calls within windows forms.</p>
<h3>Within you base class</h3>
<p>You probably have a common base class for all your UI components. Add these methods :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">namespace</span> TestWinForm</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">class</span> BaseForm <span class="sy0">:</span> Form</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Execute some code in async mode.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// When it&#39;s done, it calls the nextStep delegate, eventually with</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// an exception catched during the main action.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">virtual</span> <span class="kw1">void</span> Async<span class="br0">&#40;</span>Action action, Action nextStep<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">new</span> Thread<span class="br0">&#40;</span><span class="kw4">delegate</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Exception exception <span class="sy0">=</span> <span class="kw1">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>Exception ex<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exception <span class="sy0">=</span> ex;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadSafe<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">=&amp;</span>gt; <span class="br0">&#123;</span> nextStep<span class="br0">&#40;</span>exception <span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">Start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// This allows a sub class to easily run a method within</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// an UI thread without the need of creating multiple</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// delegate signatures for each method signatures</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">virtual</span> <span class="kw1">void</span> ThreadSafe<span class="br0">&#40;</span>MethodInvoker method<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>InvokeRequired<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Invoke<span class="br0">&#40;</span>method<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; method<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Within your UI classes</h3>
<p>Now the only thing you need to do is to encapsulate the methode content with the Async() method :</p>
<div class="geshi csharp">
<div class="head">namespace TestWinForm</div>
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> partial <span class="kw4">class</span> MainForm <span class="sy0">:</span> BaseForm</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> MainForm<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Here is the async trick :</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8211; UI will NOT freeze,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8211; you can add beautifull animated gifs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">void</span> button1_Click<span class="br0">&#40;</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateTime<span class="sy0">?</span> result <span class="sy0">=</span> <span class="kw1">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Async<span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">=&amp;</span>gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result <span class="sy0">=</span> GetComplexDate<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>ex<span class="br0">&#41;</span> <span class="sy0">=&amp;</span>gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ex <span class="sy0">==</span> <span class="kw1">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textBox1.<span class="me1">Text</span> <span class="sy0">=</span> result.<span class="me1">Value</span>.<span class="me1">ToShortDateString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textBox1.<span class="me1">Text</span> <span class="sy0">=</span> ex.<span class="me1">Message</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// This is the slow, data-intensive task :p</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> DateTime<span class="sy0">?</span> GetComplexDate<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.<span class="me1">Sleep</span><span class="br0">&#40;</span><span class="nu0">3000</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> DateTime.<span class="me1">Now</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The traditional way</h3>
<p>Just in case you didn&#8217;t get it. This is what you should <strong>NOT DO</strong>:</p>
<div class="geshi csharp">
<div class="head">// This was traditional way :</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8211; UI will freeze until during 3 second &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8211; you users will complain</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// avoid this !</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">void</span> button1_Click2<span class="br0">&#40;</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textBox1.<span class="me1">Text</span> <span class="sy0">=</span> GetComplexDate<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">ToShortDateString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span>Exception ex<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textBox1.<span class="me1">Text</span> <span class="sy0">=</span> ex.<span class="me1">Message</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Happy coding !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/asynchronous-tasks-on-winforms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Make InvokeRequired/Invoke easy</title>
		<link>http://www.manitra.net/blog/dev/invokerequiredinvoke-easier/</link>
		<comments>http://www.manitra.net/blog/dev/invokerequiredinvoke-easier/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 21:31:30 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[WinForm]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=31</guid>
		<description><![CDATA[Do background tasks, use multiple threads in a .NET Windows Forms environement without creating tons of delegates and crying about InvokeRequired/Invoke.]]></description>
			<content:encoded><![CDATA[<h3>The problem</h3>
<p>If you&#8217;re working on WinForms, you must know that you cannot call controls methods within a thread that is not the one that created those controls. To solve this problem, Microsoft recommend us to use the following code :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">namespace</span> TestWinForm</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> partial <span class="kw4">class</span> MainForm <span class="sy0">:</span> BaseForm</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> MainForm<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// a delegate that has been created specially for this method</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">delegate</span> <span class="kw1">void</span> DisplayDelegate<span class="br0">&#40;</span><span class="kw4">string</span> text<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// a method that may be called from a worker thread</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">virtual</span> <span class="kw1">void</span> Display<span class="br0">&#40;</span><span class="kw4">string</span> text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>InvokeRequired<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Invoke<span class="br0">&#40;</span><span class="kw3">new</span> DisplayDelegate<span class="br0">&#40;</span>Display<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//the actual job is here</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textBox1.<span class="me1">AppendText</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>This code is ugly because :</p>
<ul>
<li>you need to create a delegate for each single public method you can call from outside</li>
<li>you need to put an &#8220;if/else&#8221; block in each method wich increase the complexity of your code</li>
</ul>
<h3>The trick</h3>
<p>Here is a trick that could significantly reduce the amount of code needed to do the same job within a large project.</p>
<h4>Within you base class</h4>
<p>You probably have a common base class for all your UI components. Add this method :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">namespace</span> TestWinForm</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">class</span> BaseForm <span class="sy0">:</span> Form</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// This allows a sub class to easily run a method within</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// an UI thread without the need of creating multiple </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// delegate signatures for each method signatures</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">virtual</span> <span class="kw1">void</span> ThreadSafe<span class="br0">&#40;</span>MethodInvoker method<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>InvokeRequired<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Invoke<span class="br0">&#40;</span>method<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; method<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h4>Within your UI classes</h4>
<p>Now the only thing you need to do is to encapsulate the methode content with the ThreadSafe() method :</p>
<div class="geshi csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">namespace</span> TestWinForm</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> partial <span class="kw4">class</span> MainForm <span class="sy0">:</span> BaseForm</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> MainForm<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// public method that may be called from outside and within any</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// worker thread &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">virtual</span> <span class="kw1">void</span> Display<span class="br0">&#40;</span><span class="kw4">string</span> text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadSafe<span class="br0">&#40;</span><span class="kw4">delegate</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//do any UI related code here</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//note that because this is an anonym method, </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//you can use the local parameter</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textBox1.<span class="me1">AppendText</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Happy coding !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/invokerequiredinvoke-easier/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A .NET fault tolerant web service framework implementation</title>
		<link>http://www.manitra.net/blog/dev/fault-tolerant-web-service-framework-implementation/</link>
		<comments>http://www.manitra.net/blog/dev/fault-tolerant-web-service-framework-implementation/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 13:20:31 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Web service]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/?p=24</guid>
		<description><![CDATA[Here is a .NET implementation of a fault tolerant web service framework. The idea One of the bad sides of web services is that they just regularly fail. As a developper, handling such situation is a pain and that&#8217;s why I created this framework. It has two main parts : a command line code generator [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a .NET implementation of a fault tolerant web service framework.</p>
<h3>The idea</h3>
<p>One of the bad sides of web services is that they just <em>regularly fail</em>. As a developper, handling such situation is a pain and that&#8217;s why I created this framework. It has two main parts :</p>
<ul>
<li>a command line code generator that creates an encapsulation of the web service clients generated by Visual Studo</li>
<li>a small assembly that do the fault tolerance behaviour</li>
</ul>
<p>The framework will automatically retry any web service call that fails and will switch to configured alternative urls.</p>
<h3>Features</h3>
<ul>
<li>work with existing code : the generated classes inherits from the ones that visual studio creates so there will be <em>no signature changes</em></li>
<li><em>automatically retry</em> all web service calls on failure</li>
<li><em>automatically switch to alternative urls</em> on failure</li>
<li>allow multiple alternative urls per web service with <em>priority support</em></li>
<li>easy to configure (max retry, retry interval, url list per web service)</li>
<li>allow command line generation for automation (with batch file or <em>post build event</em>)</li>
<li>allow an interactive and <em>user friendly</em> way to generate the soap client classes (using a Winform interface)</li>
<li>work with C# and Visual Basic projects</li>
<li>failures are logged using <em>log4net</em> so you can easily record them to any data storage for auditing purpose</li>
<li>open source : do whatever you want with the binaries and the code. <em>Just share</em> you enhancements</li>
</ul>
<h3>Files</h3>
<p>I release the binaries and the source code so you can just contribute to enhance it (I&#8217;ll appreciate any feedback).</p>
<ul>
<li><a href="http://www.manitra.net/blog/wp-content/uploads/2008/07/faulttolerantwebservice-0200-src.zip">Fault tolerant web service source code (0.2.0.0)</a></li>
<li><a href="http://www.manitra.net/blog/wp-content/uploads/2008/07/faulttolerantwebservice-0200-bin.zip">Fault tolerant web service binaries (0.2.0.0)</a></li>
<li><a href="http://www.manitra.net/blog/wp-content/uploads/2008/07/config-sample.xml">Fault tolerant web service configuration file sample (0.2.0.0)</a></li>
</ul>
<h3>How to install and use it</h3>
<p>Here are the step for installing and using the fault tolerant framework :</p>
<h4>Basic steps</h4>
<ul>
<li>unzip the binary package anywhere in your computer</li>
<li>launch <em>FaultTolerantWebService.Ui.exe</em></li>
<li>click the &#8220;Load&#8221; button and select the .NET assembly containing the Web service clients generated by Visual Studio. You can see the generated code in the main text box now.</li>
<li>to automate this task, click on <em>save as</em> near the the command line text box and save it to the default name.</li>
<li>add a reference to the <em>FaultTolerantWebService.Common.dll</em> in the project containing the Web refences.</li>
<li>add the generated file named <em>FaultTolerantWebService.cs</em> in your project (by default, it will located on the root of your project )</li>
</ul>
<p>You&#8217;re done ! Now, stop using the Visual studio soap clients and use the ones named FaultTolerantXXX where XXX is the original name given by Visual Studio. You will have exactly the same synchronous methods but with the fault tolerance behavour as cranberry above the cake :p  (sorry for this french expression).</p>
<h4>Additional steps</h4>
<p>To configure the framework, you can use <a href="http://www.manitra.net/blog/wp-content/uploads/2008/07/config-sample.xml">this sample configuration file </a>in your client application.</p>
<h3>The road map</h3>
<p>The next steps will be :</p>
<ul>
<li><span style="text-decoration: line-through;">add the ability to contact multiple URL per Web Services</span></li>
<li><span style="text-decoration: line-through;">add the ability to configure the max retry and retry interval</span></li>
<li>a complete Visual Studio Integration, to make things easier</li>
</ul>
<p>So if you want to help, just download the code and send me patches !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/fault-tolerant-web-service-framework-implementation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A great, open source, Visual Studio 2005/2008 Addin</title>
		<link>http://www.manitra.net/blog/dev/a-great-open-source-visual-studio-20052008-addin/</link>
		<comments>http://www.manitra.net/blog/dev/a-great-open-source-visual-studio-20052008-addin/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 22:51:01 +0000</pubDate>
		<dc:creator>manitra</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Visual Studio Addin]]></category>

		<guid isPermaLink="false">http://www.manitra.net/blog/developpement/a-great-open-source-visual-studio-20052008-addin/</guid>
		<description><![CDATA[I&#8217;d like to give an introdution of a great and open source addin for Visual Studio 2005/2008. Its name is Koda and its main features are: generate Constructos and properties from existing fields fast type/file search goto Test Collapse all project Close all documents More features are comming soon ! If you don&#8217;t want to pay for [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to give an introdution of a great and open source addin for Visual Studio 2005/2008. Its name is <a target="_blank" href="http://www.codeplex.com/koda" title="Koda, a great addin for Visual Studio">Koda</a> and its main features are:</p>
<ul>
<li>generate Constructos and properties from existing fields</li>
<li>fast type/file search</li>
<li>goto Test</li>
<li>Collapse all project</li>
<li>Close all documents</li>
</ul>
<p>More features are comming soon !</p>
<p>If you don&#8217;t want to pay for addin like resharper this one is the best &#8220;free&#8221; alternative.</p>
<p>To make it short, here are the project info :</p>
<p><strong>Name </strong>: Koda</p>
<p><strong>Url </strong>: <a target="_blank" href="http://www.codeplex.com/koda" title="Koda, a great addin for Visual Studio">http://www.codeplex.com/koda</a></p>
<p><strong>Cost </strong>: Free</p>
<p><strong>Source </strong>: Open source, hosted by CodePlex</p>
<p><strong>Language </strong>: C#</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manitra.net/blog/dev/a-great-open-source-visual-studio-20052008-addin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

