gpt4 book ai didi

c# - 如何非异步下载数据?

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:24 25 4
gpt4 key购买 nike

我想在 Windows Phone 应用程序中非异步下载数据。我会制作一个下载器类,并在其中使用一个简单的方法从 URL 下载字符串。在其他平台上,我会使用:

 public class TextDownloader
{
public string GetString(string url)
{
WebClient web = new WebClient();
string s = web.DownloadString("http://www.google.com");
return s;
}
}

它会很好用:简单、最少的代码。但是,WebClient.DownloadString 方法在 Windows Phone 7 上不可用,也没有许多 WebRequest 选项。在 Windows Phone 中是否有其他非异步下载数据的方法?我宁愿不必为下载和错误创建多个事件,只需要一个简单的方法返回一个值或抛出一个异常。

最佳答案

事实上,您不能使用开箱即用的 WebClient 下载同步模型。这是设计使然,鉴于 Windows Phone 应用程序的性质,您应该遵循此方法。

您的问题的解决方案 - 回调。您可以轻松地将函数重构为如下所示:

public void GetString(string url, Action<string> onCompletion = null)
{
WebClient client = new WebClient();
client.DownloadStringCompleted += (s, e) =>
{
if (onCompletion != null)
onCompletion(e.Result);
};
client.DownloadStringAsync(new Uri(url));
}

这使得它相对容易使用并在完成时触发一个 Action 。还有另一种方法可以做到这一点,那就是 - async/await。您将需要安装 Bcl.Async通过 NuGet 打包:

Install-Package Microsoft.Bcl.Async -Pre 

它会让你这样做:

public async Task<string> DownloadString(string url)
{
WebClient client = new WebClient();
return await client.DownloadStringTaskAsync(url);
}

尽管如此,它仍将绑定(bind)到异步模型,只是以不同的方式包装,线程将等待获取字符串,然后再将其返回给调用者。

关于c# - 如何非异步下载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com