title: Notify when thread is complete, without locking calling thread
body: <p>I am working on a legacy application that is built on top of NET 3.5. This is a constraint that I can't change. 
  I need to execute a second thread to run a long running task without locking the UI. When the thread is complete, somehow I need to execute a Callback.</p>
  
  <p>Right now I tried this pseudo-code:</p>
  
  <pre><code>Thread _thread = new Thread(myLongRunningTask) { IsBackground = True };
  _tread.Start();
  // wait until it's done
  _thread.Join();
  // execute finalizer
  </code></pre>
  
  <p>The second option, which does not lock the UI, is the following:</p>
  
  <pre><code>Thread _thread = new Thread(myLongRunningTask) { IsBackground = True };
  _tread.Start();
  // wait until it's done
  while(_thread.IsAlive)
  {
      Application.DoEvents();
      Thread.Sleep(100);
  }
  // execute finalizer
  </code></pre>
  
  <p>Of course the second solution is not good cause it overcharge the UI.
  What is the correct way to execute a callback when a _thread is complete? Also, how do I know if the thread was cancelled or aborted?</p>
  
  <p>*<em>Note: *</em> I can't use the BackgroundWorker and I can't use the Async library, I need to work with the native thread class.</p>