【问题标题】:Windows phone get server source codewindows phone 获取服务器源代码
【发布时间】:2015-11-08 07:08:35
【问题描述】:

我正在尝试获取网站的源代码。在 Windows 应用程序中,一个简单的 http 请求就足够了。但是在windows phone中它要复杂得多。 我在谷歌上搜索了很多,并没有给出明确的答案。 这是我尝试过但没有取得很大成功的方法。

public static sReturn = "";

private string _InetGetSourceCode(string sUrl)
{
   _InetReadEx(sUrl);
   return sReturn;
}

private void _InetReadEx(string sUrl)
{
   WebClient client = new WebClient();

   client.DownloadStringCompleted += new    
   DownloadStringCompletedEventHandler(DownloadStringCallback2);
   client.DownloadStringAsync(new Uri(sUrl));
}

private static void DownloadStringCallback2(Object sender,DownloadStringCompletedEventArgs e)
{
   if (!e.Cancelled && e.Error == null)
   {
      sReturn = e.Result;
   }
}

我在这里做错了什么?

【问题讨论】:

  • 你说的“没有大成功”是什么意思
  • 我只是在报废样品,似乎没有任何效果。
  • 似乎不起作用,比如... 例外?所有数据都大写?编码问题?超时?爆手机? WhatsApp 的高分被抹去?如果您无法对问题做出清晰的解释,我们将如何给出解决方案?

标签: c# windows web-services visual-studio windows-phone-8


【解决方案1】:

问题是您立即返回sReturn,但下载要到将来某个时间才能完成。所以sReturn在你返回的时候还是有空字符串的默认值。

您可以下载 this sample,其中包含使用 HttpClient 可移植库完全执行您想做的事情的代码。

【讨论】:

  • @Petter 说得通。我跟着链接迷路了。我从未使用过异步方法。我会尝试让它工作并回来。谢谢
  • @Maria async 不是一次性的方法。 Silverlight/Windows Phone 上的开发使用异步范例来访问数据,而不管操作需要什么。对于一些 live 示例,请参阅 Lucian Wishik (Microsoft) Async Silverlight sync Samples,这将很容易适用于 WP8 平台。
  • 观看此视频,了解async 编程简介:Understanding Async and Awaitable Tasks
【解决方案2】:

我终于找到了我的问题的正确答案: 非常感谢@Peter Torr - MSFT 的帮助让我找到了问题的确切答案

回答

    public static sReturn = "";
    public async Task _InetReadEx(string sUrl)
        {
            try
            {
                HttpClient httpClient = new HttpClient();

                HttpResponseMessage response = await httpClient.GetAsync(new Uri(sUrl));
                response.EnsureSuccessStatusCode();

                //sStatus = response.StatusCode + " " + response.ReasonPhrase + Environment.NewLine;
                sSource = await response.Content.ReadAsStringAsync();
                sSource = sSource.Replace("<br>", Environment.NewLine); // Insert new lines
            }
            catch (Exception hre)
            {
                sSource = string.Empty;
            }
        }

以及如何称呼它:

    public MainPage()
        {
            InitializeComponent();
            Task.Run(async () => { await _InetReadEx("http://url.com/"); }).Wait();
        }

非常感谢大家和社区!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多