本文共 1835 字,大约阅读时间需要 6 分钟。
111然后我们看Silverlight 4及之前的版本中如何异步获取数据,其代码如下:
//SL4异步获取结果 private void SL4InitiateWebRequest() { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:12887/helloWorld.xml"); request.BeginGetResponse(new AsyncCallback(onRequestComplete), request); } private void onRequestComplete(IAsyncResult asynchronousResult) { HttpWebRequest request = asynchronousResult.AsyncState as HttpWebRequest; HttpWebResponse response = request.EndGetResponse(asynchronousResult) as HttpWebResponse; var s = response.GetResponseStream(); var reader = new StreamReader(s); string xmlFileText = reader.ReadToEnd(); this.Dispatcher.BeginInvoke(() => { MessageBox.Show("这是SL4获取Xml数据:"+xmlFileText); }); }然后我们再看通过TPL来异步获取数据,当然这之前需要using System.Threading.Tasks。
//silverlight 5并行计算 private void SL5InitiateWebRequest() { string uri = "http://localhost:12887/helloWorld.xml"; var request = HttpWebRequest.Create(uri); var webTask = Task.Factory.FromAsync最后我们客户端调用上面的两种方式来获取数据。(request.BeginGetResponse, request.EndGetResponse,TaskCreationOptions.None) .ContinueWith(task => { var response = (HttpWebResponse)task.Result; var stream = response.GetResponseStream(); var reader = new StreamReader(stream); string xmlFileText = reader.ReadToEnd(); this.Dispatcher.BeginInvoke(() => { MessageBox.Show("这是SL5获取Xml的数据:" + xmlFileText); }); }); }
public MainPage() { InitializeComponent(); //调用普通异步 SL4InitiateWebRequest(); //并行任务库 SL5InitiateWebRequest(); }
运行效果一致,如下两图,另外如需源码请点击 下载。
转载地址:http://xguhl.baihongyu.com/