【问题标题】:how to make a httpwebrequest on application launch in wp7如何在 wp7 中启动应用程序时发出 httpwebrequest
【发布时间】:2013-12-16 15:00:20
【问题描述】:
如何在 windows phone 7 和 8 中同步启动应用程序的 httpwebrequest,以便根据服务器的响应可以更改起始页。
private void Application_Launching(object sender, LaunchingEventArgs e)
{
// http request and respose b
// based on response select the start page
}
【问题讨论】:
标签:
windows-phone-7
windows-phone-8
【解决方案1】:
只执行async 请求。对于WP7,您可以执行async 请求并等待response,基于response,您可以按照您的逻辑导航到页面。为此,请在 Startup Page:
在class's constructor这样的调用方法中NavigateToPages();
现在在该方法中,您可以调用您想要的http reqeust,当您获得response 时,导航到类似页面,
void NavigateToPage()
{
WebClient client = new WebClient();
client.DownloadStringCompleted += (object sender, DownloadStringCompletedEventArgs e) =>
{
var result = e.Result;
//Navigate to page
}
client.DownloadStringAsync(new Uri("<your web request"));
}
这将等到您收到response。同时,要向用户显示您正在请求 web service,您可以添加 ProgressIndicator 并在开始 web request 之前启动它并将“获取响应”作为 text 并在 response让它empty ""。还建议您在try-catch-finally 块中调用请求。这样,如果互联网中断或获取reponse 的问题,应用程序不应崩溃。
我为 WP7 做了这个,我认为应该也适用于 WP8。如果你愿意,试试吧。
【解决方案2】:
你不能进行同步调用。
你能做的就是下一个最好的事情。使方法异步并使用 http 客户端的 PCL 版本。
这将使您的逻辑以类似同步的方式流动(尽管仍然是异步的)。
【解决方案3】:
正如@Hermit Dave 建议的那样,您不能在 WP 中发出同步 http 请求,并且使其异步会破坏您当前的应用程序逻辑。应用程序执行可能会在调用返回响应之前退出 Application_Launching 方法。
也许您可以创建一个默认页面作为起始页面,显示某种加载动画和一些提示,让用户了解应用程序当前正在处理什么。在该页面中进行异步 http 请求。并在回调中,根据响应重定向到正确的页面。