protected void OnReciveMessage(HttpWebEventArgs e) { if (ReciveMessage != null) { ReciveMessage(this, e); } }
/// <summary> /// 读取数据回调函数. /// </summary> /// <param name="asyncResult"></param> public void ReadCallBack(IAsyncResult asyncResult) { // 从 asyncresult 获取 RequestState 对象 RequestState rs = (RequestState)asyncResult.AsyncState; // 取出在 RespCallback 中设置的 ResponseStream Stream responseStream = rs.ResponseStream; // 此时 rs.BufferRead 中应该有一些数据。 // 读取操作将告诉我们那里是否有数据 int read = responseStream.EndRead(asyncResult); if (read > 0) { // 准备 Char 数组缓冲区,用于向 Unicode 转换 Char[] charBuffer = new Char[BUFFER_SIZE]; // 将字节流转换为 Char 数组,然后转换为字符串 // len 显示多少字符被转换为 Unicode int len = rs.StreamDecoder.GetChars(rs.BufferRead, 0, read, charBuffer, 0); String str = new String(charBuffer, 0, len); // 将最近读取的数据追加到 RequestData stringbuilder 对象中, // 该对象包含在 RequestState 中 rs.RequestData.Append(str); // 现在发出另一个异步调用,读取更多的数据 // 请注意,将不断调用此过程,直到 // responseStream.EndRead 返回 -1 IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs); } else { if (rs.RequestData.Length > 1) { // 所有数据都已被读取,因此将其显示到控制台 string strContent; strContent = rs.RequestData.ToString(); HttpWebEventArgs e = new HttpWebEventArgs(strContent); OnReciveMessage(e); } // 关闭响应流 responseStream.Close(); } return; }