Question

Salutations,

J'essaie de télécharger une page Web avec le code suivant:

public partial class MainPage : PhoneApplicationPage
{
    private static string result = null;

    // Constructor
    public MainPage()
    {
        InitializeComponent();

        LoadFeeds();
    }

    public static void LoadFeedsCompleted(Object sender, DownloadStringCompletedEventArgs e)
    {
        result = e.Result;
    }

    private void LoadFeeds()
    {
        string url = "http://www.cornfedsystems.com";
        Uri uri = new Uri(url);
        WebClient client = new WebClient();
        client.DownloadStringCompleted += LoadFeedsCompleted;
        client.AllowReadStreamBuffering = true;
        client.DownloadStringAsync(uri);
        for (; ; )
        {
            if (result != null)
            {
                console.Text = result;
                result = null;
            }
            Thread.Sleep(100);
        }
    }

}

Ce code se compile bien, mais lorsque je le démarre dans l'émulateur, il est simplement accroché avec l'écran de l'horloge, c'est-à-dire attendre. J'ai mis des points d'arrêt et je peux voir que la boucle FOR est en train de tourner mais la valeur du résultat n'est jamais mise à jour. La console est une zone de texte. Des réflexions sur ce qui pourrait se passer?

Merci,

FM

Était-ce utile?

La solution

Je ne vois pas le but de la boucle que vous avez dans votre code, ainsi que celle du result chaîne de caractères. Voici ce que j'ai pour votre problème.

Voici le code qui déclenchera finalement le processus:

string url = "http://www.cornfedsystems.com";
Uri uri = new Uri(url);
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.AllowReadStreamBuffering = true;
client.DownloadStringAsync(uri);

Voici le gestionnaire d'événements:

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    Debug.WriteLine(e.Result);
}

Tout le traitement des résultats doit être effectué dans le gestionnaire d'événements qui sera déclenché lorsque tout sera prêt (dans votre cas - la chaîne est téléchargée). Avec DowhloadStRingAsync, vous obtiendrez la source de page - il est constant et ne change pas (contrairement à un flux dynamique), vous n'avez donc pas besoin de la boucle là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top