lang110 发表于 2018-6-24 11:11:52

Windows Phone 7 的Http网络库使用技巧

public>{  public DownloadStringCompletedEventArgs(string result, bool cancelled, Exception error, object userState)
  : base(error, cancelled, userState)
  {
  Result = result;
  }
  public string Result
  {
  get;
  private set;
  }
  }

  public>  {
  public OpenReadCompletedEventArgs(Stream result,bool cancelled,Exception error,object userState)
  : base(error, cancelled, userState)
  {
  Result = result;
  }
  public Stream Result
  {
  get;
  private set;
  }
  

  }
  public delegate void DownloadStringCompletedEventHandler(Object sender, DownloadStringCompletedEventArgs e);
  public delegate void OpenReadCompletedEventHandler(object sender, OpenReadCompletedEventArgs e);

  public>  {
  HttpWebRequest _webRequest = null;
  private string _result = "";
  private byte[] _buffer;
  const int BUFFER_SIZE = 1024;
  MemoryStream _memStream = null;
  object _userToken = null;
  static string cache = Guid.NewGuid().ToString();
  public NoCacheWebClient()
  {
  _buffer = new byte;
  Encoding = Encoding.UTF8;
  _memStream = new MemoryStream();
  }
  

  public event DownloadStringCompletedEventHandler DownloadStringCompleted;
  public event OpenReadCompletedEventHandler OpenReadCompleted;
  

  public void CancelAsync()
  {
  if (_webRequest != null)
  {
  _webRequest.Abort();
  _result = "";
  _userToken = null;
  }
  }
  public Encoding Encoding
  {
  get;
  set;
  }
  private Uri RequestUri
  {
  set;
  get;
  }
  public void OpenReadAsync(Uri address)
  {
  RequestUri = address;
  _webRequest = (HttpWebRequest)HttpWebRequest.Create(address.AbsoluteUri);
  _webRequest.BeginGetResponse(StreamRespCallback, null);
  

  }
  

  private void StreamRespCallback(IAsyncResult asynchronousResult)
  {
  try
  {
  HttpWebResponse response = (HttpWebResponse)_webRequest.EndGetResponse(asynchronousResult);
  Stream responseStream = response.GetResponseStream();
  if (OpenReadCompleted != null)
  {
  System.Windows.Deployment.Current.Dispatcher.BeginInvoke(OpenReadCompleted, new object[] { this, new OpenReadCompletedEventArgs(responseStream, false, null, _userToken) });
  }
  }
  catch (WebException e)
  {
  string message = e.Message;
  }
  }
  public void DownloadStringAsync(Uri address)
  {
  _result = "";
  _memStream = new MemoryStream();
  string cacheValue = "";
  if (address.Query.Length == 0)
  {
  cacheValue = "?Cache=" + cache;
  }
  else
  {
  cacheValue = "&Cache=" + cache;
  }
  

  Uri newAddress = new Uri(address.AbsoluteUri + cacheValue, UriKind.RelativeOrAbsolute);
  RequestUri = newAddress;
  _webRequest = (HttpWebRequest)HttpWebRequest.Create(newAddress.AbsoluteUri);
  _webRequest.BeginGetResponse(RespCallback, null);
  }
  public void DownloadStringAsync(Uri address,object userToken)
  {
  _result = "";
  _userToken = userToken;
  _memStream = new MemoryStream();
  string cacheValue = "";
  if (address.Query.Length == 0)
  {
  cacheValue = "?Cache=" + cache;
  }
  else
  {
  cacheValue = "&Cache=" + cache;
  }
  Uri newAddress = new Uri(address.AbsoluteUri + cacheValue, UriKind.RelativeOrAbsolute);
  RequestUri = newAddress;
  _webRequest = (HttpWebRequest)HttpWebRequest.Create(newAddress.AbsoluteUri);
  _webRequest.BeginGetResponse(RespCallback, userToken);
  }
  private void RespCallback(IAsyncResult asynchronousResult)
  {
  try
  {
  HttpWebResponse response = (HttpWebResponse)_webRequest.EndGetResponse(asynchronousResult);
  Stream responseStream = response.GetResponseStream();
  responseStream.BeginRead(_buffer, 0, BUFFER_SIZE, new AsyncCallback(ReadCallback), responseStream);
  }
  catch (WebException e)
  {
  string message = e.Message;
  }
  }
  private void ReadCallback(IAsyncResult asyncResult)
  {
  try
  {
  Stream stream = (Stream)asyncResult.AsyncState;
  int read = stream.EndRead(asyncResult);
  if (read > 0)
  {
  _memStream.Write(_buffer, 0, read);
  stream.BeginRead(_buffer, 0, BUFFER_SIZE, new AsyncCallback(ReadCallback), stream);
  }
  else
  {
  _result = Encoding.GetString(_memStream.ToArray(), 0, (int)_memStream.Length);
  stream.Close();
  _memStream.Close();
  

  if (DownloadStringCompleted != null)
  {
  System.Windows.Deployment.Current.Dispatcher.BeginInvoke(DownloadStringCompleted, new object[] { this, new DownloadStringCompletedEventArgs(_result, false, null, _userToken) });
  }
  }
  }
  catch (System.Exception ex)
  {
  string message = ex.Message;
  }
  }
  

  private void WriteCallBack(IAsyncResult asyncResult)
  {
  try
  {
  _memStream.EndWrite(asyncResult);
  Stream stream = (Stream)asyncResult.AsyncState;
  stream.BeginRead(_buffer, 0, BUFFER_SIZE, new AsyncCallback(ReadCallback), stream);
  

  }
  catch (System.Exception ex)
  {
  string message = ex.Message;
  }
  }
  }
  
页: [1]
查看完整版本: Windows Phone 7 的Http网络库使用技巧