title: uses of creating a thread and Blocking UI
body: <p>I have started a special course in multithreading but I have some fundamental issues I want to clear up.  say I have a thread</p>
  
  <pre><code>Thread t1 = new Thread(() =&gt;  
              {
                  Thread.CurrentThread.IsBackground = true;
                  IsCancel = false;
                  this.workProj.DoWorkWithRefSync(ref IsCancel); 
              });             
  t1.Start();
  </code></pre>
  
  <p>Followed by</p>
  
  <pre><code>while(t1.IsAlive)
  {
  }
  </code></pre>
  
  <p>or</p>
  
  <pre><code>t1.Join();
  </code></pre>
  
  <p>or</p>
  
  <pre><code>myAutoResetEvent.WaitOne();  // myAutoResetEvent.Set() called in thread when it finished processing
  </code></pre>
  
  <p>I am not sure but, this might not be a good example but looking forward to one.
  I know that they are all some form of signaling from the background thread to inform the calling/UI thread that the work has completed.
   But using them end up blocking the UI until the thread completes. So I would like to know a real life scenario implementation of this.
  I am thinking why not just run this process on the UI thread since you don't mind blocking it.
  Edit: In otherwords, I am looking for the real uses of these blocking elements such as thread.Join() etc</p>