Асинхронный ввод-вывод (чтение потока из асинхронного веб-запроса) - PullRequest
0 голосов
/ 06 ноября 2010

Я сталкиваюсь с небольшой проблемой при попытке прочитать команду «End» из асинхронного веб-запроса.Вот код:

    public void GetHTTP(string http)
    {
        request = (HttpWebRequest)WebRequest.Create(http);
        RequestState rs = new RequestState(); // Class to hold state. Can ignore...
        Setup(); // contain statements such as request.Accept =...;
        rs.Request = request;
        IAsyncResult r = (IAsyncResult)request.BeginGetResponse(new AsyncCallback ResponseSetup), rs);
        allDone.WaitOne();
        Referer = http; //Can ignore this...
    }

    private void ResponseSetup(IAsyncResult ar)
    {
        RequestState rs = (RequestState)ar.AsyncState;
        WebRequest request = rs.Request;
        WebResponse response = request.EndGetResponse(ar);
        Stream ResponseStream = response.GetResponseStream();
        rs.ResponseStream = ResponseStream;
        IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
        StreamReader reader = new StreamReader(ResponseStream);
        information = reader.ReadToEnd();
        //The problem is right here; ReadToEnd.
    }

При попытке вызвать метод readToEnd я получаю следующее сообщение об ошибке: Поток не поддерживает одновременные операции чтения или записи ввода / вывода.

У меня естьискал, но я не смог найти решение этой проблемы.Как это можно исправить?

1 Ответ

1 голос
/ 06 ноября 2010

Это потому, что вы пытаетесь сделать два чтения. Вызов BeginRead инициирует операцию чтения. Затем ReadToEnd инициирует другую операцию чтения в том же потоке.

Я думаю, что вы хотите просто ReadToEnd. Удалить звонок на ResponseStream.BeginRead.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...