title: Run event handlers in another thread (without threads blocking)
body: <p>I have a class <code>Communicator</code> that works in a background thread receiving data on a TCP port.</p>
  
  <p>The Communicator has an event <code>OnDataReceived</code> which is of a  <code>EventHandler&lt;DataReceivedEventArgs&gt;</code> type.</p>
  
  <p>There is another class <code>Consumer</code> that contains a method subscribed to the <code>Communicator.OnDataReceived</code> event. </p>
  
  <pre><code>comm.OnDataReceived += consumer.PresentData;
  </code></pre>
  
  <p>The <code>Consumer</code> class is created within a Form constructor and then one of its methods is called on another thread. This method is an infinite loop, so it stays in that method during the application execution.</p>
  
  <p>What I'd like to do is for the <code>Communicator.OnDataReceived</code> event to invoke the <code>consumer.PresentData</code> method on consumer's thread. </p>
  
  <p>Is that even nearly possible? And if it is, what kind of mechanisms (sync classes) should I use? </p>