Q:

Is there a .ReadLine() function for NetworkStream or something similar to it?

I'm new to TCP clients and communication with hosts, so sorry if this looks like a dumb question.
I'm creating a Serial/TCP application which communicates with devices. Since I already wrote most of the code for serial part of the application and TCP is my new task I'm trying my best to make it compatible with one another. When I'm communicating with serial devices I retrieve data using .ReadLine() but NetworkStream(which i use to retrieve data from host) doesn't have this function. Is there any way to implement or to write this function by myself?
All I managed to do is retrieve data from NetworkStream in a byte array and then I convert it into ASCII but this approach doesn't suit me...
Edit:
        private void Button_TCP_Connect_Click(object sender, EventArgs e)
        {
            try
            {
                Int32 port = Convert.ToInt32(TextBox_TCP_Port.Text);
                String server = TextBox_TCP_Server.Text;
                var IP = IPAddress.Parse(TextBox_TCP_Host.Text);

                TCP = new TcpClient();
                TCP.Connect(IP, port);

                if (TCP.Connected)
                {
                    TextBox_System_Log.Text = "***CONNECTED***" + Environment.NewLine + "Host: " + IP.ToString()
                        + Environment.NewLine + "Port: " + port.ToString() + Environment.NewLine;
                    tcpConnection = true;

                    Stream = TCP.GetStream();

                    Timer_NetworkStream.Enabled = true;
                    Timer_NetworkStream.Start();

                    byte[] buffer = new byte[4096];

                    Stream.BeginRead(buffer, 0, buffer.Length, ReadComplete, buffer);
                }
            }
            catch (SocketException exception)
            {
                MessageBox.Show(exception.ToString());
            }
        }
            void ReadComplete(IAsyncResult iar)
            {

                byte[] buffer = (byte[])iar.AsyncState;

                int bytesAvailable = Stream.EndRead(iar);

                int lastIndex = Array.FindLastIndex(buffer, b => b != 0);
                Array.Resize(ref buffer, lastIndex + 1);
                SetText(System.Text.Encoding.ASCII.GetString(buffer));

            Stream.BeginRead(buffer, 0, buffer.Length, ReadComplete, buffer);
        }

I added my code that I use to create a TCP client and my NetworkStream. Since it's not eventbased and I'm constantly receiving data from host I used .BeginRead() as a workaround which fires upon receiving data. StreamReader doesn't seem like a good option cause it uses loops to iterate over lines and this would freeze the GUI of my app. Putting StreamReader inot a BackgroundWorker isn't an option since it's already being used by my application.

A:

If nws is your stream, then 
var reader = new StreamReader(nws);
var myString = reader.ReadLine();

does what you want.

