title: SerialPort wait for response
body: <p>Do we have in .NET 4.0 the opportunity to wait for a response and then to return the response?</p>
  
  <p>Currently I'm doing it like this but it isn't really nice and I don't like it:</p>
  
  <pre><code>public partial class MainWindow : Window
  {
      public MainWindow()
      {
          InitializeComponent();
          byte[] options = new byte[]{1,1,0};
          COMManager mgr = new COMManager("COM1");
  
          byte[] result = mgr.GetResponse(options);
      }
  }
  </code></pre>
  
  <p>And my COM Manager Class
  (I have to do the operation in a seperate class (dll)):</p>
  
  <pre><code>public class COMManager
      {
          SerialPort sp = null;
          byte[] result = null;
          bool completed = false;
  
          public COMManager(string comport)
          {
              sp = new SerialPort(comport);
              sp.DataReceived +=new SerialDataReceivedEventHandler(sp_DataReceived);
          }
  
          public byte[] GetResponse(byte[] option)
          {
              sp.Write(option, 0, option.Length);
              //I don't like the way...
              while (!completed) { }
              completed = false;
              return result;
          }
  
          void  sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
          {
              result = new byte[sp.BytesToRead];
              sp.Read(result, 0, sp.BytesToRead);
              completed = true;
          }
      }
  </code></pre>
  
  <p>In .NET 4.5 we may have the opportunity to use the "await" statement. But for the current project we only are allowed to use .NET 4.0.
  Any ideas?</p>