NetworkStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Начинает асинхронное чтение из объекта NetworkStream.
public:
override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public:
override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback callback, object state);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, size As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
Параметры
- buffer
- Byte[]
Массив типа Byte, который является местоположением в памяти для хранения данных, прочитанных из NetworkStream.
- offset
- Int32
Местоположение в объекте buffer
, начиная с которого записываются сохраняемые данные.
- sizecount
- Int32
Число байтов, читаемых из объекта NetworkStream.
- callback
- AsyncCallback
Делегат AsyncCallback, который выполняется после выполнения метода BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).
- state
- Object
Объект, содержащий любые дополнительные данные, определенные пользователем.
Возвращаемое значение
Объект IAsyncResult, который представляет асинхронный вызов.
Исключения
Параметр buffer
имеет значение null
.
Значение параметра offset
меньше 0.
-или-
Значение параметра offset
больше длины значения, указанного в параметре buffer
.
-или-
Значение параметра size
меньше 0.
-или-
Значение параметра size
больше разности значений длины в параметре buffer
и значения параметра offset
.
Основной объект Socket закрыт.
-или-
Произошел сбой в процессе чтения из сети.
-или-
Произошла ошибка при обращении к сокету.
Объект NetworkStream закрыт.
Комментарии
Важно!
Это API совместимости. Мы не рекомендуем использовать методы APM (Begin/End) для новой разработки. Вместо этого используйте эквиваленты на основе задач.
Вы можете передать обратный вызов, реализующий AsyncCallback для BeginRead , чтобы получать уведомления о завершении операции. Обратите внимание, что если базовый сетевой стек выполняет операцию синхронно, обратный вызов будет выполняться во время вызова BeginRead. В этом случае свойству CompletedSynchronously возвращаемого IAsyncResult объекта будет присвоено значение true
, чтобы указать, что метод завершился синхронно.
AsyncState Используйте свойство объекта , IAsyncResult чтобы получить объект состояния, переданный методу BeginRead .
Операция BeginRead должна быть завершена путем вызова EndRead метода . Как правило, метод вызывается предоставленным AsyncCallback делегатом. EndRead блокирует вызывающий поток до завершения операции.
Операция считывает столько данных, сколько доступно, вплоть до количества байтов, указанного параметром size
.
Примечание
Если вы получаете IOException, проверка InnerException свойство , чтобы определить, было ли оно вызвано SocketException. Если это так, используйте ErrorCode свойство , чтобы получить конкретный код ошибки.
Операции чтения и записи можно выполнять одновременно с экземпляром NetworkStream класса без необходимости синхронизации. Пока существует один уникальный поток для операций записи и один уникальный поток для операций чтения, между потоками чтения и записи не будет никаких перекрестных помех, а синхронизация не требуется.