title: Console.Writeline from EventHandler
body: <p>I've written a simple async TCP-Server - it works well. But now I want to make an output of the received Data on the Console-Testprogram. And the problem is, this isn't working! If I connect the MainThread to the EventHandler the program does nothing. Debug is showing that the sc05Server_DataAvailable was called but then nothing happened. The program is still responsive.</p>
  
  <p>Here The Code:</p>
  
  <pre><code>private void ReadCallback(IAsyncResult asyncResult)
  {
      Sc05BdClient sc05BdClient = asyncResult.AsyncState as Sc05BdClient;
      if (sc05BdClient == null) return;
      NetworkStream networkStream = sc05BdClient.NetworkStream;
      int read = networkStream.EndRead(asyncResult);
  
      if (read == 0)
      {
          lock (clients)
          {
              clients.Remove(sc05BdClient);
              return;
          }
      }
  
      string data = Encoding.GetString(sc05BdClient.Buffer, 0, read);
      System.Diagnostics.Debug.Print(data);
      OnDataAvailable(this, new DataAvailableEventArgs(data));  &lt;---- here Handler is called
      networkStream.BeginRead(sc05BdClient.Buffer, 0, sc05BdClient.Buffer.Length, ReadCallback, sc05BdClient);
  }
  
  
  public event EventHandler&lt;DataAvailableEventArgs&gt; DataAvailable;
  
  protected virtual void OnDataAvailable(object sender, DataAvailableEventArgs e)
  {
      EventHandler&lt;DataAvailableEventArgs&gt; handler = DataAvailable;
      if (handler != null)
          handler(sender, e);
  }
  
  
  public class DataAvailableEventArgs : EventArgs
  {
      public string Data;
  
      public DataAvailableEventArgs(string data)
      {
          Data = data;
      }
  }
  </code></pre>
  
  <p>The Main program:</p>
  
  <pre><code>class Program
  {
      static void Main()
      {
          Sc05BdServer sc05BdServer = new Sc05BdServer(IPAddress.Any, 2006);
          sc05BdServer.DataAvailable += sc05BdServer_DataAvailable;
          sc05BdServer.Start();
  
          Console.ReadKey();
          sc05BdServer.Stop();
      }
  
      static void sc05BdServer_DataAvailable(object sender, DataAvailableEventArgs e)
      {
         Console.WriteLine(e.Data);  &lt;--- this is called once
      }
  }
  </code></pre>
  
  <p>I think it has something to do with Threading - but I have no idea how to work with them.</p>