<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://laflour.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2flaflour.spaces.live.com%2fcategory%2fCodeSnippets%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michael's Coding Den: CodeSnippets</title><description /><link>http://laflour.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catCodeSnippets</link><language>en-US</language><pubDate>Wed, 08 Oct 2008 03:53:23 GMT</pubDate><lastBuildDate>Wed, 08 Oct 2008 03:53:23 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://laflour.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>8463920662804772276</live:id><live:alias>laflour</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Updating UI with anonymous delegate</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!331.entry</link><description>&lt;div&gt;Williams gave a codesnippet of how to update UI from another thread with AD &lt;a href="http://spaces.msn.com/staceyw/blog/cns!F4A38E96E598161E!652.entry?_c11_blogpart_blogpart=blogview&amp;amp;_c=blogpart#permalink"&gt;&lt;u&gt;http://spaces.msn.com/staceyw/blog/cns!F4A38E96E598161E!652.entry?_c11_blogpart_blogpart=blogview&amp;amp;_c=blogpart#permalink&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Updating+UI+with+anonymous+delegate&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!331.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!331.entry</guid><pubDate>Wed, 01 Mar 2006 19:35:06 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!331/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!331.entry#comment</wfw:comment><dcterms:modified>2006-03-01T19:39:43Z</dcterms:modified></item><item><title>Interrupting Thread in robust way</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!322.entry</link><description>&lt;div&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; System;&lt;br&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; System.IO;&lt;br&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; System.Threading;&lt;br&gt; &lt;br&gt;&lt;span style="color:blue"&gt;class&lt;/span&gt; App&lt;br&gt;{&lt;br&gt;    &lt;span style="color:blue"&gt;static&lt;/span&gt; &lt;span style="color:blue"&gt;volatile&lt;/span&gt; &lt;span style="color:blue"&gt;bool&lt;/span&gt; terminate = &lt;span style="color:blue"&gt;false&lt;/span&gt;;&lt;br&gt;    &lt;span style="color:blue"&gt;static&lt;/span&gt; &lt;span style="color:blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args)&lt;br&gt;    {&lt;br&gt;        Thread t = &lt;span style="color:blue"&gt;new&lt;/span&gt; Thread(&lt;span style="color:blue"&gt;new&lt;/span&gt; ThreadStart(Func));&lt;br&gt;        t.Start();&lt;br&gt;        Console.ReadLine();&lt;br&gt;        &lt;span style="color:green"&gt;// set the flag to get the thread to come down cleanly&lt;/span&gt;&lt;br&gt;        terminate = &lt;span style="color:blue"&gt;true&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:blue"&gt;if&lt;/span&gt;( !t.Join(2000) ) &lt;span style="color:green"&gt;// if the thread has taken more than 2 seconds to terminate&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:green"&gt;// Wake the thread up&lt;/span&gt;&lt;br&gt;            t.Interrupt();&lt;br&gt;            &lt;span style="color:green"&gt;// wait for it to terminate&lt;/span&gt;&lt;br&gt;            t.Join();&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;    &lt;span style="color:blue"&gt;static&lt;/span&gt; &lt;span style="color:blue"&gt;void&lt;/span&gt; Func()&lt;br&gt;    {&lt;br&gt;        &lt;span style="color:green"&gt;// open some resource that requires clean up&lt;/span&gt;&lt;br&gt;        &lt;span style="color:blue"&gt;using&lt;/span&gt;(FileStream fs = File.OpenWrite(@&amp;quot;C:\foo.txt&amp;quot;))&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:green"&gt;// check the flag&lt;/span&gt;&lt;br&gt;            &lt;span style="color:blue"&gt;while&lt;/span&gt;(!terminate)&lt;br&gt;            {&lt;br&gt;                &lt;span style="color:green"&gt;// use the resource&lt;/span&gt;&lt;br&gt;                fs.WriteByte(0);&lt;br&gt;                &lt;span style="color:green"&gt;// oh dear, we aren't going to notice the flag for 10 seconds now&lt;/span&gt;&lt;br&gt;                Thread.Sleep(10000);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style="color:teal"&gt;&lt;/span&gt; 
&lt;p&gt;Source: &lt;a href="http://www.dotnetconsult.co.uk/weblog/PermaLink.aspx/4f52c396-1b0d-4419-8871-6ca6992460ca"&gt;&lt;u&gt;http://www.dotnetconsult.co.uk/weblog/PermaLink.aspx/4f52c396-1b0d-4419-8871-6ca6992460ca&lt;/u&gt;&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Interrupting+Thread+in+robust+way&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!322.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!322.entry</guid><pubDate>Mon, 20 Feb 2006 12:03:53 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!322/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!322.entry#comment</wfw:comment><dcterms:modified>2006-02-20T17:28:50Z</dcterms:modified></item><item><title>Thread safe AND operation without locks</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!321.entry</link><description>&lt;p&gt;This snippet performs threadsafe AND operations, based on &lt;font face="Courier New, Courier, Monospace"&gt;Interlocked &lt;/font&gt;calls. 
&lt;div&gt;&lt;span style="color:blue"&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;static&lt;/span&gt; &lt;span style="color:blue"&gt;class&lt;/span&gt; InterlockedEx &lt;br&gt;{&lt;br&gt;    &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;static&lt;/span&gt; Int32 And(&lt;span style="color:blue"&gt;ref&lt;/span&gt; Int32 target, Int32 with) &lt;br&gt;    {&lt;br&gt;        Int32 startVal, currentVal = target;&lt;br&gt;        &lt;span style="color:green"&gt;// Don't access target in the loop except in an attempt &lt;/span&gt;&lt;br&gt;        &lt;span style="color:green"&gt;// to change it because another thread may be touching it&lt;/span&gt;&lt;br&gt;        &lt;span style="color:blue"&gt;do&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:green"&gt;// Record this iteration's starting value&lt;/span&gt;&lt;br&gt;            startVal = currentVal;&lt;br&gt;            &lt;span style="color:green"&gt;// Calculate the desired value (this example ANDs the bits)&lt;/span&gt;&lt;br&gt;            Int32 desiredVal = startVal &amp;amp; with;&lt;br&gt;            &lt;span style="color:green"&gt;// NOTE: The thread could be pre-empted here&lt;/span&gt;&lt;br&gt;            &lt;span style="color:green"&gt;// if (target == startVal) target = desiredVal;&lt;/span&gt;&lt;br&gt;            &lt;span style="color:green"&gt;// Value prior to potential change is returned&lt;/span&gt;&lt;br&gt;            currentVal = Interlocked.CompareExchange(&lt;span style="color:blue"&gt;ref&lt;/span&gt; target, desiredVal, startVal);&lt;br&gt;            &lt;span style="color:green"&gt;// If the starting value changed during this iteration, repeat &lt;/span&gt;&lt;br&gt;        } &lt;br&gt;        &lt;span style="color:blue"&gt;while&lt;/span&gt; (startVal != currentVal);&lt;br&gt;        &lt;span style="color:green"&gt;// Return this iteration's starting value&lt;/span&gt;&lt;br&gt;        &lt;span style="color:blue"&gt;return&lt;/span&gt; currentVal;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/div&gt;
&lt;p&gt;&lt;font face="Courier New, Courier, Monospace"&gt;&lt;font face=Tahoma&gt;Source: &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/10/ConcurrentAffairs/"&gt;&lt;u&gt;&lt;font face=Tahoma&gt;http://msdn.microsoft.com/msdnmag/issues/05/10/ConcurrentAffairs/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New, Courier, Monospace"&gt; &lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Thread+safe+AND+operation+without+locks&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!321.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!321.entry</guid><pubDate>Mon, 20 Feb 2006 09:38:54 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!321/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!321.entry#comment</wfw:comment><dcterms:modified>2006-02-20T17:32:09Z</dcterms:modified></item></channel></rss>