挑這兩個出來是因為在 Windows Phone (或說Silverlight) 上僅有這兩個可用
這兩個類別可以讓我們用來取得網路上的資源,不論是網頁內容、Xml 資訊、圖片、音樂檔案等,
而且非常方便的提供了 Async 方法,讓我們不必自己利用 Thread 處理背景下載的麻煩事,
WebClient 的官方文件於此,簡單的範例與說明如下
private void GetHttpDocument(String strURL)
{
WebClient client = new WebClient();
//client.AllowReadStreamBuffering = false; // 若加上這行即為不使用 Buffer
client.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCallback);
client.OpenReadAsync(new Uri(strURL, UriKind.Absolute));
}
private void OpenReadCallback(Object sender, OpenReadCompletedEventArgs e)
{
Stream stream = (Stream)e.Result;
// stream 已為完整資料串流,可將 stream 寫為 File 或啥米的應用
}
HttpWebRequest 的官方文件於此,簡單的範例與說明如下
private void GetHttpDocument(String strURL)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
//request.AllowReadStreamBuffering = false; // 若加上這行即為不使用 Buffer
request.BeginGetResponse(new AsyncCallback(GetHttpDocCallback), request);
}
private void GetHttpDocumentCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream stream = response.GetResponseStream();
// stream 已為完整資料串流,可將 stream 寫為 File 或啥米的應用
}
比較需注意的是 HttpWebRequest 不可以使用 new HttpWebRequest(); 來建構物件
也不可以使用它的基底類別 WebRequest 來建構轉型,因為 WebRequest 是個抽像類別,
必須使用靜態方法 WebRequest.Create() 來回傳型別為 HttpWebRequest 的物件。
而 HttpWebRequest 比較是針對 http Protocol 所設計的,WebClient 是比較單純的網路資源類別,
除非有特殊需要但如修改 http Header 參數,WebClient 就蠻夠用的了,
事實上,WebClient 能做的事其實比 HttpWebRequest 多了不少,只是目前沒用到,暫不紀錄。
沒有留言:
張貼留言