wp中为了提升用户体验,砍掉了http的同步操作,仅支持http异步请求,那么该如何及时处理异步操作返回的结果。纠结了很久,终于在技术群中好友的帮助下解决了问题,借助事件,将异步编程模型模式简单的处理成类似webclient的事件异步模式(windows phone 7的)。

class Helper
{
public Action<string> DownLoadStringCompleted = null; public void HtmlGet(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.BeginGetResponse(asyn =>
{
var httpResult = (HttpWebRequest)asyn.AsyncState;
var response = (HttpWebResponse)request.EndGetResponse(asyn);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string result = reader.ReadToEnd(); //处理返回的html
if (DownLoadStringCompleted != null)
{
DownLoadStringCompleted(result);
}
};
}, request);
}
}

之后变可以向使用WebClient的OpenReadAsync一样处理数据

windows phone 8 实现方式的改变

public class HttpHelper
{
public async Task<string> GetUrlContentAsync(string url)
{
var request = WebRequest.CreateHttp(url);
string result;
try
{
using (WebResponse response = await request.GetResponseAsync())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
result = await reader.ReadToEndAsync();
}
}
}
catch (WebException webExc)
{
throw webExc;
} return result;
} //private HttpClient client; public Task<HttpWebResponse> GetResponseAsync(HttpWebRequest request)
{
var taskComplete = new TaskCompletionSource<HttpWebResponse>();
try
{
request.BeginGetResponse(asyncResponse =>
{
HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
HttpWebResponse response = responseRequest.EndGetResponse(asyncResponse) as HttpWebResponse;
taskComplete.TrySetResult(response);
}, request);
}
catch (WebException webExc)
{
HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
taskComplete.TrySetResult(failedResponse);
}
return taskComplete.Task;
}
}

最新文章

  1. 理解AUC
  2. transform:rotate()将元素进行不同角度的旋转
  3. uml面向对象建模基础总结
  4. TTS多音字问题
  5. c#配置log4net步骤
  6. C++ Txt文档写入
  7. zoj 1033 与其说是搜索,不如说是枚举
  8. 多线程学习之二坚不可摧模式Immutable pattern
  9. 看Lucene源码必须知道的基本概念
  10. Android O --Soong Build
  11. 用户使用VPS的12个常见问题
  12. HTTP 和 WebSocket的区别
  13. docker 搭建 web 服务环境
  14. php: Cannot send session cache limiter
  15. Unity shader学习之菲涅耳反射
  16. Java 13 - Java 数组
  17. 使用 vi/vim 时,粘贴进新创建文件或空文件的首行内容丢失的解决方法
  18. delphi 手机振动 IOS Android
  19. windwos文档格式转换成unix格式
  20. X-UA-Compatible也无法解决的IE11兼容问题

热门文章

  1. 升级SUSE Linux内核的完整步骤!
  2. $_SERVER详细资料整理(转)
  3. 60款开源云应用【Part 2】(60 Open Source Apps You Can Use in the Cloud)
  4. ThinkPHP CURD方法盘点:limit方法
  5. Android ListView快速定位(四)
  6. Dubbo架构设计详解--转载
  7. Genymontion安装
  8. 使用WCF和WEBService出现配置的问题
  9. Android颜色大全
  10. SQL SERVER 锁定的实例