首先建立一個Silverlight 5項目,在其Web項目中添加一個新的xml檔案helloWorld.xml。編寫代碼如下:
<?xml version="1.0" encoding="utf-8" ?>
<a>111</a>
然後我們看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<WebResponse>(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();
}
本文轉自程興亮 51CTO部落格,原文連結:http://blog.51cto.com/chengxingliang/827058