Problem z while i odczytem danych przy pomocy StreamReader - Client CTP

0
Byte[] task = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(task, 0, task.Length);

var stream1 = new StreamReader(stream, Encoding.ASCII);
string line = String.Empty;
while ((line = stream1.ReadLine()) != null)
{
       Console.WriteLine(line);
 }

Po odczytaniu ostatniej linii - zatrzymuje się w pętli i oczekuje... nie przechodzi do kolejnej instrukcji.
Jak wyjsc z pętli? z tego co już wiem to problemem może być CRLF (enter)
Wychodzi z pętli przy "ręcznym" przerwaniu pętli przy użyciu metody Contains("")

0

EDIT

Mi coś takiego działa bez problemu:

class Program
    {
        static void Main(string[] args)
        {
            byte[] task = Encoding.ASCII.GetBytes("test encoding");

            using (StreamWriter sw = new StreamWriter("test.txt"))
            {
                sw.BaseStream.Write(task, 0, task.Length);
            }

            var stream1 = new StreamReader("test.txt", Encoding.ASCII);
            string line = string.Empty;
            while ((line = stream1.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }

            Console.WriteLine("koniec programu");

            Console.ReadLine();
        }
    }

output:

test encoding
koniec programu

1

Jeśli zatrzymuje Ci się przy read to pewnie czeka na dane.
Powinieneś sprawdzić property DataAvailable w NetworkStream i za pomocą tego warunku czytać.

Przykład:

public void Example () {
    if (networkStream.CanRead) {
        using (var memoryStream = new MemoryStream ()) {
            var buffer = new byte[1024];

            do {
                var numberOfBytesRead = memoryStream.Read (buffer, 0, buffer.Length);
                memoryStream.Write (buffer, 0, numberOfBytesRead);
            }
            while (networkStream.DataAvailable);

            var totalBytesReaded = memoryStream.ToArray();
        }
    }
}
0

**null ** jest niepoprawne, ponieważ chodzi o wycinek pewnego strumienia danych o nieokreślonej wielkości (pozyskiwane "runtime"). Jakieś pomysły? metoda DataAvaliable nie działa. Spora ilość danych, dlatego musi być użyta metoda ReadLine(). metoda Read nie działa jak należy - zwraca tylko fragment odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1