Serial Port with Efficient Data reading in C#

I am  not good at writing but below is few from my collection.
 
Declare the Port variable globally in a form.
  1. SerialPort Port;   
  2. string PORT_NUMBER = "YOUR PORT NUMBER" ;   
 Set the port properties in Form load. 
  1. try  
  2. {  
  3.    Port = new SerialPort("COM" + PORT_NUMBER.ToString());  
  4.    Port.BaudRate = 115200;  
  5.    Port.DataBits = 8;  
  6.    Port.Parity = Parity.None;  
  7.    Port.StopBits = StopBits.One;  
  8.    Port.Handshake = Handshake.None;  
  9.    Port.DtrEnable = true;  
  10.    Port.NewLine = Environment.NewLine;  
  11.    Port.ReceivedBytesThreshold = 1024;  
  12.    Port.Open();  
  13.   
  14. }  
  15. catch (Exception ex)  
  16. {  
  17.    MessageBox.Show("Error accessing port." + Environment.NewLine + ex.Message, "Port Error!!!", MessageBoxButtons.OK);  
  18.    Port.Dispose();  
  19.    Application.Exit();  
  20. }   
Above is the basic procedure and easy to understand.
Now create following function which will be helpful to read data from serial port simultaneously. 
  1. private void ReadEvent()  
  2.   
  3. byte[] buffer = new byte[2000];  
  4. Action kickoffRead = null;  
  5. kickoffRead = (Action)(() => Port.BaseStream.BeginRead(buffer, 0, buffer.Length, delegate(IAsyncResult ar)  
  6. {  
  7.     try  
  8.     {  
  9.         int count = Port.BaseStream.EndRead(ar);  
  10.         byte[] dst = new byte[count];  
  11.         Buffer.BlockCopy(buffer, 0, dst, 0, count);  
  12.         RaiseAppSerialDataEvent(dst);  
  13.     }  
  14.     catch (Exception exception)  
  15.     {  
  16.         MessageBox.Show(ERROR == > " + exception.ToString());    
  17.     }  
  18.     kickoffRead();  
  19. }, null)); kickoffRead();  
  20. }  
  1. //To decode the received data from the port.   
  2. private void RaiseAppSerialDataEvent(byte[] Data)  
  3. {  
  4.     string Result = Encoding.Default.GetString(Data);  
  5.      TextBox1.Invoke((Action)delegate   
  6. {  
  7.    TextBox1.Text=Result; TextBox1.Refresh();   
  8. });   
  9. }   
It will keep assigning same event when data received.

Port.BaseStream.BeginRead
Never fails and will give you each and every bit from the Port.
 
To invoke this you need to Call Port.WriteLine("AT COMMAND");
 
Hope it helps someone who is stuck with ports.