Windows Phone 7(WP7)開發 網路操作(1) HttpWebRequest基本的GET請求

來源:互聯網
上載者:User

一、預備知識:

  什麼是Get請求?什麼是Url?請直接Baidu,Google,Bing。

二、WP7的網路操作:非阻塞的非同步作業(暫時還沒有看到直接的同步的操作的方式)。

三、主要代碼:

public class Http
{
public delegate void HandleResult(string result);
private HandleResult handle;

public void StartRequest(string Url, HandleResult handle)
{
this.handle = handle;
var webRequest = (HttpWebRequest)WebRequest.Create(Url);
webRequest.Method = "GET";
try
{
webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest);
}
catch
{
}
}

public void HandleResponse(IAsyncResult asyncResult)
{
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
string result = string.Empty;
try
{
httpRequest = (HttpWebRequest)asyncResult.AsyncState;
httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(asyncResult);

using (var reader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8))
{
result = reader.ReadToEnd();
reader.Close();
}
}
catch
{

}
finally
{
if (httpRequest != null) httpRequest.Abort();
if (httpResponse != null) httpResponse.Close();
}
handle(result);
}
}

 

四、使用:

  這是一個簡單的Get操作封裝類,使用的時候只需要做如下調用:

            var http = new Http();
http.StartRequest(@"http://www.baidu.com",
result=>
{
//處理返回結果result
});

  StartRequest的第一個參數為請求的Url,當然這裡為了簡便唯寫了百度的網址。

  第二個參數是我們對結果的處理代理函數,這裡為了簡便直接使用了匿名方法。

五、問題與分析:

  1、如果是需要在獲得請求結果之後,對介面的元素進行操作,別忘記在handle中使用Deployment.Current.Dispatcher.BeginInvoke(),或者,一個更直接的辦法,就是對上面的HandleResponse的最後一句做一點修改,改為: Deployment.Current.Dispatcher.BeginInvoke(()=>handle(result));

  2、有一種極端的情況,即網路情況不好,而請求需要發送的資料又足夠長,這種請求會持續數秒,假設是介面上的一個按鈕按下的處理事件調用此網路請求,介面將會卡死。這裡有一個很容易進入誤區:以為WP7的網路都是非同步,就可以不使用多線程了。在大部分時候,此誤區並不容易被發現,主要就是網路都不算壞,而且Get的請求發送資料量都不算多,但現在討論的是極端情況,為了完美與良好的使用者體驗,在這個問題上下一點功夫還是值得的。WP7的非同步,只是發送完請求與等待請求的非同步,而發送請求的過程,還是同步的狀態,所以,需要對上面的StartRequest方法還需要進行改造:

webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest);

換成:

new Thread(() =>webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest)).Start();

(不得不說,C#的匿名函數給我們提供了很大的方便。)

六、附源碼:

http://vdisk.weibo.com/s/3baOy

 

 

轉載請註明出處:

Windows Phone 7(WP7)開發 網路操作(1) HttpWebRequest基本的GET請求

錦燕雲

http://www.cnblogs.com/vistach/archive/2012/03/14/Windows_Phone_WP7_Net_Http_HttpWebRequest_Get.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.