<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>C# on cdblg</title>
    <link>https://kinnrot.github.io/tags/c%23/</link>
    <description>Recent content in C# on cdblg</description>
    <generator>Hugo -- 0.155.3</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 16 Jun 2011 01:40:00 -0700</lastBuildDate>
    <atom:link href="https://kinnrot.github.io/tags/c%23/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>TPLing Background worker in 10 min</title>
      <link>https://kinnrot.github.io/tpling-background-worker-in-10-min/</link>
      <pubDate>Thu, 16 Jun 2011 01:40:00 -0700</pubDate>
      <guid>https://kinnrot.github.io/tpling-background-worker-in-10-min/</guid>
      <description>&lt;div style=&#34;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&#34;&gt;&lt;div style=&#34;background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px&#34;&gt;Code Snippet&lt;/div&gt;&lt;div style=&#34;background: #ddd; max-height: 500px; overflow: auto&#34;&gt;&lt;ol style=&#34;background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;&#34;&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Linq;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Text;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Threading;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Threading.Tasks;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;namespace&lt;/span&gt; WpfApplication1&lt;/li&gt;&lt;li&gt;{&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;    &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;TResult, TProgress&amp;gt;&lt;/li&gt;&lt;li&gt;    {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;TResult, TProgress&amp;gt; New()&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;TResult, TProgress&amp;gt;();&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;TResult, TProgress&amp;gt; StartWith(&lt;span style=&#34;color:#2b91af&#34;&gt;Func&lt;/span&gt;&amp;lt;&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt;, &lt;span style=&#34;color:#2b91af&#34;&gt;CancellationToken&lt;/span&gt;, TResult&amp;gt; work)&lt;/li&gt;&lt;li&gt;        {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            Start = work;&lt;/li&gt;&lt;li&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;this&lt;/span&gt;;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;TResult, TProgress&amp;gt; FinishWith(&lt;span style=&#34;color:#2b91af&#34;&gt;Action&lt;/span&gt;&amp;lt;TResult,&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt;&amp;gt; finish)&lt;/li&gt;&lt;li&gt;        {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            Finish = finish;&lt;/li&gt;&lt;li&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;this&lt;/span&gt;;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;readonly&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;CancellationTokenSource&lt;/span&gt; _cancelationTokenSource;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;CancellationToken&lt;/span&gt; _cancellationToken;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;readonly&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TaskScheduler&lt;/span&gt; _uiScheduler;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; TBackgroundWorker()&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            _cancelationTokenSource = &lt;span style=&#34;color:#0000ff&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;CancellationTokenSource&lt;/span&gt;();&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            _uiScheduler = &lt;span style=&#34;color:#2b91af&#34;&gt;TaskScheduler&lt;/span&gt;.FromCurrentSynchronizationContext();&lt;/li&gt;&lt;li&gt;        }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;protected&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Func&lt;/span&gt;&amp;lt;&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt;, &lt;span style=&#34;color:#2b91af&#34;&gt;CancellationToken&lt;/span&gt;,TResult&amp;gt; Start { &lt;span style=&#34;color:#0000ff&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#0000ff&#34;&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;protected&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Action&lt;/span&gt;&amp;lt;TResult, &lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt;&amp;gt; Finish { &lt;span style=&#34;color:#0000ff&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#0000ff&#34;&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;void&lt;/span&gt; ReportProgress(&lt;span style=&#34;color:#2b91af&#34;&gt;Action&lt;/span&gt;&amp;lt;TProgress&amp;gt; progressReport,TProgress progress)&lt;/li&gt;&lt;li&gt;        {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            &lt;span style=&#34;color:#2b91af&#34;&gt;Task&lt;/span&gt;.Factory.StartNew(()=&amp;gt;progressReport(progress),&lt;span style=&#34;color:#2b91af&#34;&gt;CancellationToken&lt;/span&gt;.None,&lt;span style=&#34;color:#2b91af&#34;&gt;TaskCreationOptions&lt;/span&gt;.None,_uiScheduler);&lt;/li&gt;&lt;li&gt;        }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;TResult, TProgress&amp;gt; Begin(&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt; state = &lt;span style=&#34;color:#0000ff&#34;&gt;null&lt;/span&gt;)&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            _cancellationToken = _cancelationTokenSource.Token;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            &lt;span style=&#34;color:#2b91af&#34;&gt;Task&lt;/span&gt;&amp;lt;TResult&amp;gt;.Factory.&lt;/li&gt;&lt;li&gt;                StartNew(()=&amp;gt;Start(state,_cancellationToken),_cancellationToken).&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                ContinueWith(x =&amp;gt;&lt;/li&gt;&lt;li&gt;                                 Finish(x.Result,state),&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                                 _uiScheduler);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;this&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;        }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;void&lt;/span&gt; Cancel()&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            _cancelationTokenSource.Cancel(&lt;span style=&#34;color:#0000ff&#34;&gt;true&lt;/span&gt;);&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;    }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;usage&lt;br /&gt;&lt;br /&gt;&lt;div style=&#34;border: #000080 1px solid; color: #000; font-family: &#39;Courier New&#39;, Courier, Monospace; font-size: 10pt&#34;&gt;&lt;div style=&#34;background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px&#34;&gt;Code Snippet&lt;/div&gt;&lt;div style=&#34;background: #ddd; max-height: 300px; overflow: auto&#34;&gt;&lt;ol style=&#34;background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;&#34;&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Linq;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Text;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Threading;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Controls;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Data;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Documents;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Input;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Media;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Media.Imaging;&lt;/li&gt;&lt;li&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Navigation;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;using&lt;/span&gt; System.Windows.Shapes;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&lt;span style=&#34;color:#0000ff&#34;&gt;namespace&lt;/span&gt; WpfApplication1&lt;/li&gt;&lt;li&gt;{&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;    &lt;span style=&#34;color:#808080&#34;&gt;///&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#808080&#34;&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;    &lt;span style=&#34;color:#808080&#34;&gt;///&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt; Interaction logic for MainWindow.xaml&lt;/span&gt;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;    &lt;span style=&#34;color:#808080&#34;&gt;///&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#808080&#34;&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;    &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;partial&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;MainWindow&lt;/span&gt; : &lt;span style=&#34;color:#2b91af&#34;&gt;Window&lt;/span&gt;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;    {&lt;/li&gt;&lt;li&gt;        &lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;&lt;span style=&#34;color:#0000ff&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#0000ff&#34;&gt;int&lt;/span&gt;&amp;gt; _bg;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;public&lt;/span&gt; MainWindow()&lt;/li&gt;&lt;li&gt;        {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            InitializeComponent();&lt;/li&gt;&lt;li&gt;        }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;void&lt;/span&gt; a_Click(&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt; sender, &lt;span style=&#34;color:#2b91af&#34;&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            _bg = &lt;span style=&#34;color:#2b91af&#34;&gt;TBackgroundWorker&lt;/span&gt;&amp;lt;&lt;span style=&#34;color:#0000ff&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#0000ff&#34;&gt;int&lt;/span&gt;&amp;gt;.New().&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                StartWith(StartSomething).&lt;/li&gt;&lt;li&gt;                FinishWith(ShowResult).&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                Begin();&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;void&lt;/span&gt; ShowResult(&lt;span style=&#34;color:#0000ff&#34;&gt;string&lt;/span&gt; obj,&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt; state)&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            a.Content = obj;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;string&lt;/span&gt; StartSomething(&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt; arg, &lt;span style=&#34;color:#2b91af&#34;&gt;CancellationToken&lt;/span&gt; cancellationToken)&lt;/li&gt;&lt;li&gt;        {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;int&lt;/span&gt; i = 0;&lt;/li&gt;&lt;li&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;while&lt;/span&gt; (i &amp;lt; 200)&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            {&lt;/li&gt;&lt;li&gt;                &lt;span style=&#34;color:#0000ff&#34;&gt;if&lt;/span&gt; (cancellationToken.IsCancellationRequested)&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                {&lt;/li&gt;&lt;li&gt;                    &lt;span style=&#34;color:#0000ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;quot;Cacncelled&amp;quot;&lt;/span&gt;;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                    &lt;/li&gt;&lt;li&gt;                }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                i++;&lt;/li&gt;&lt;li&gt;                &lt;span style=&#34;color:#2b91af&#34;&gt;Thread&lt;/span&gt;.Sleep(50);&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;                _bg.ReportProgress(Report,i);&lt;/li&gt;&lt;li&gt;            }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;            &lt;span style=&#34;color:#0000ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;quot;Done&amp;quot;&lt;/span&gt;;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;void&lt;/span&gt; Report(&lt;span style=&#34;color:#0000ff&#34;&gt;int&lt;/span&gt; obj)&lt;/li&gt;&lt;li&gt;        {&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;            a.Content = obj;&lt;/li&gt;&lt;li&gt;        }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;        &lt;span style=&#34;color:#0000ff&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#0000ff&#34;&gt;void&lt;/span&gt; Button_Click(&lt;span style=&#34;color:#0000ff&#34;&gt;object&lt;/span&gt; sender, &lt;span style=&#34;color:#2b91af&#34;&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        {&lt;/li&gt;&lt;li&gt;            _bg.Cancel();&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;        &lt;/li&gt;&lt;li&gt;    }&lt;/li&gt;&lt;li style=&#34;background: #f3f3f3&#34;&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Prevent setting a property value after already been set</title>
      <link>https://kinnrot.github.io/preventing-from-setting-property-value/</link>
      <pubDate>Mon, 04 Apr 2011 08:52:00 -0700</pubDate>
      <guid>https://kinnrot.github.io/preventing-from-setting-property-value/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s say we write an infrastructure of entities and their interaction with Nhibernate and the rest of the server side logic.&lt;br /&gt;We want Nhibernate to do whatever it needs. But we also want to limit the application programmer from doing crazy things, for example: Setting the Unique Identifier of an existing entity to another value. I know it sounds crazy but in a medium-sized team, anything can happen and this stuff is critical for the future.&lt;br /&gt;&lt;br /&gt;So I thought about a very KIS way to implement this kind of protection.&lt;br /&gt;&lt;br /&gt;* What I write here is the most readable version of my code, you can extract method, use interceptor, AOP, whatever works for you.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&#34;brush: csharp;&#34;&gt;private long _id;&lt;br /&gt;&lt;br /&gt;public long ID&lt;br /&gt;{&lt;br /&gt;  get { return _id; }&lt;br /&gt;  set&lt;br /&gt;  {&lt;br /&gt;    if (!_id.Equals(default(long)) &amp;amp;&amp;amp; !_id.Equals(value))&lt;br /&gt;    {&lt;br /&gt;      throw new InvalidOperationException(&lt;br /&gt;        &amp;ldquo;You can&amp;rsquo;t set this property, it has already been set&amp;rdquo;);&lt;br /&gt;    }&lt;br /&gt;    _id = value;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Very simple, easy to test, and it works with NHibernate proxy.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
