Скачивание файла при запуске приложения WP7 - PullRequest
1 голос
/ 01 августа 2011

Я пытаюсь автоматически войти в систему на странице 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;

    }

1 Ответ

3 голосов
/ 01 августа 2011

WebClient не так асинхронен, как можно было бы ожидать - он выполняет различные действия в потоке пользовательского интерфейса, включая обработку DownloadStringCompleted.Поэтому все, что ему нужно сделать, будет ждать захвата потока пользовательского интерфейса - который вы на минуту заблокировали с помощью цикла for.

Обычно удерживать поток пользовательского интерфейса - действительно плохая идея.как это.Я бы начал с заставки с надписью «Загрузка файла ...», оставив поток пользовательского интерфейса без дела и способный обрабатывать такие события, как завершение веб-запроса - и , а затем , когда файл завершит загрузку, вы можете переместитьна ваш «настоящий» первый экран.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...