在应用启动WP7时下载文件
本文关键字:下载 文件 WP7 应用 启动 | 更新日期: 2023-09-27 18:04:00
我试图在应用程序启动之前自动在spash页面上登录用户,但是下面的代码不起作用。我把断点,似乎loginDone从未被调用。当从按钮启动时,非常类似的代码工作得很好。Application_Launching方法是否有什么特殊之处,意味着它不能下载字符串?可能不是所有的东西都被初始化了,所以它不会工作,但我希望它会出错。
private void Application_Launching(object sender, LaunchingEventArgs e)
{
done = false;
IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
appSettings.Remove("sid");
if (appSettings.Contains("username") && appSettings.Contains("password")) {
WebClient wc = new WebClient();
wc.DownloadStringCompleted += loginDone;
wc.DownloadStringAsync(InkBunnyUrls.Login(appSettings["username"].ToString(), appSettings["password"].ToString()));
for (int i = 0; (i < 60 && !done); i++) {
Thread.Sleep(TimeSpan.FromSeconds(1));
}
}
}
private void loginDone(object sender, DownloadStringCompletedEventArgs e)
{
IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
XDocument loginxml = XDocument.Parse(e.Result);
var sid = (loginxml.Descendants("response").Elements("sid")).FirstOrDefault();
if (sid == null || sid.Value.Length < 1) {
appSettings.Add("sid", sid.Value);
}
done = true;
}
WebClient
并不像人们想象的那样异步——它在UI线程上做各种事情,包括DownloadStringCompleted
处理。因此,无论它需要做什么,都将等待获得UI线程-您已经用for
循环阻塞了一分钟。