2011-07-12 7 views
1

私はそれは私がUriKindが相対設定されていることを知っているのWindows PhoneアプリC#読むのStreamReaderウェブページウリ相対

string html = new StreamReader(Application.GetResourceStream(new Uri("http://www.knbsb.nl/nw/index.php?option=com_content&view=category&layout=blog&id=382&Itemid=150&lang=nl&LevelID=120&CompID=1580", UriKind.Relative)).Stream).ReadToEnd(); 

のためである私は、このコード を使用しています。このWebページのコンテンツを読むダウンロードするようになったが、それは他のスクリプトのためでなければなりません。

基本的に私は絶対的なUriから相対的なUrikindにウェブページを作らなければなりません。 しかし、私はそれを行う方法を知らない!

答えて

2

あなたは非同期リクエストを行う必要があります。
あなたはヘルパーとして、このようなものを使用することができます。

public static void RequestAsync(Uri url, Action<string, Exception> callback) 
{ 
    if (callback == null) 
    { 
     throw new ArgumentNullException("callback"); 
    } 

    try 
    { 
     var req = WebRequest.CreateHttp(url); 

     AsyncCallback getTheResponse = ar => 
     { 
      try 
      { 
       string responseString; 

       var request = (HttpWebRequest)ar.AsyncState; 

       using (var resp = (HttpWebResponse)request.EndGetResponse(ar)) 
       { 
        using (var streamResponse = resp.GetResponseStream()) 
        { 
         using (var streamRead = new StreamReader(streamResponse)) 
         { 
          responseString = streamRead.ReadToEnd(); 
         } 
        } 
       } 

       callback(responseString, null); 
      } 
      catch (Exception ex) 
      { 
       callback(null, ex); 
      } 
     }; 

     req.BeginGetResponse(getTheResponse, req); 
    } 
    catch (Exception ex) 
    { 
     callback(null, ex); 
    } 
} 

あなたは、このように電話をかけることができます:それは主にUIThread上で実行されるため

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    RequestAsync(
     new Uri("http://www.knbsb.nl/nw/index.php?option=com_content&view=category&layout=blog&id=382&Itemid=150&lang=nl&LevelID=120&CompID=1580"), 
     (html, exc) => 
      { 
       if (exc == null) 
       { 
        Dispatcher.BeginInvoke(() => MessageBox.Show(html)); 
       } 
       else 
       { 
        // handle exception appropriately 
       } 
      }); 
} 
+0

これは、電話機のダウンロード文字列が機能しないため動作しているようです。しかし、私はこれにhtlm文字列をアサインしたい://////// \t \t m_doc = new HtmlDocument(); ///////////// \t \t \t m_doc.LoadHtml(html); ////////私はできませんか? –

+0

@ Lark125どこからHtmlDocumentクラスを取得していますか?携帯電話にはプラットフォームSDKの一部として含まれていません。あなたは最終的に何を達成しようとしていますか?また、http://htmlagilitypack.codeplex.com/ –

+0

を見たいかもしれませんが、htmlagilityパックから取得していますが、webadressとして絶対パスをロードできません。 –

0

WebClientを使用してください。

using (var client = new WebClient()) 
     { 
      string result = client.DownloadString("http://www.youtsite.com"); 
//do whatever you want with the string. 

    } 
+0

Webクライアントは、携帯電話上で最適ではありません。 –

+0

DownloadStringは電話では使用できません。非同期バージョン –

0

Application.GetResourceStreamがないウェブからリソースを要求するため、アプリケーションパッケージからリソースを読み取るためです。

代わりにHttpWebRequestまたはWebClientクラスを使用してください。

例:

string html; 
using (WebClient client = new WebClient()) { 
    html = client.DownloadString("http://www.knbsb.nl/nw/index.php?option=com_content&view=category&layout=blog&id=382&Itemid=150&lang=nl&LevelID=120&CompID=1580"); 
} 
+0

WebClientの同期メソッドはWP7では使用できません。また、7.0でWebClientを使用することをお勧めします.WebClientは常にUIスレッド上に戻るためです。 –

関連する問題