在应用启动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;
    }

在应用启动WP7时下载文件

WebClient并不像人们想象的那样异步——它在UI线程上做各种事情,包括DownloadStringCompleted处理。因此,无论它需要做什么,都将等待获得UI线程-您已经用for循环阻塞了一分钟。

一般来说,像这样占用UI线程是一个非常糟糕的主意。我会以一个显示"正在下载文件…"的闪屏启动,让UI线程很好地空闲,并能够处理诸如web请求完成之类的事件,然后然后当文件完成下载时,您可以移动到"真正的"第一个屏幕。