Este método se implementa del lado del cliente y se utiliza para proporcionar los datos que se van a procesar desde un origen personalizado. La implementación de este método debe crear una matriz de datos y pasarla al llamador, que luego será responsable de liberar su memoria una vez que haya terminado de usarla.
Data[out] Este parámetro hace referencia a los datos que se van a leer. La implementación de este método debe crear este arreglo y escribir en él los datos necesarios. El código que realiza la llamada es responsable de liberar esta memoria cuando ya no sea necesaria.Count[in] Este parámetro especifica el límite máximo del número de bytes que se van a leer.BytesRead[out, retval] Este parámetro especifica el número de bytes que se leyeron realmente (es decir, el tamaño de memoria ocupado por el búfer Data). Si este número es mayor que 0, el método se volverá a llamar hasta que este parámetro devuelva 0.
La implementación del cliente de este método debe garantizar que todas las excepciones que se produzcan dentro del método se capturen y gestionen, y que no se propaguen fuera de él. La propagación de una excepción fuera del método puede dar lugar a resultados impredecibles, como la finalización del programa.