WebClient.DownloadStringAsync не работает с эмулятором WP7

Привет,

Я пытаюсь загрузить веб-страницу со следующим кодом:

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);
        }
    }

}

Этот код прекрасно компилируется, но когда я запускаю его в эмуляторе, он просто зависает с экраном часов, т.е. ждет. Я поставил несколько точек останова и вижу, что цикл for вращается, но значение результата никогда не обновляется. консоль - это текстовое поле. Есть мысли о том, что может происходить?

Спасибо,

FM


person Frank Miller    schedule 15.02.2011    source источник


Ответы (1)


Я не вижу цели цикла, который у вас есть в вашем коде, а также цели строки result. Вот что у меня есть по вашему вопросу.

Вот код, который в конечном итоге запустит процесс:

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);

Вот обработчик события:

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

Вся обработка результатов должна производиться в обработчике событий, который сработает, когда все будет готово (в вашем случае — строка будет загружена). С DowhloadStringAsync вы получите исходный код страницы — он постоянен и не меняется (в отличие от динамической ленты), поэтому вам не нужен цикл.

person Den Delimarsky    schedule 15.02.2011
comment
Спасибо за ответ. Это прекрасно работает и является самым простым кодом, который я видел для этого. - person Frank Miller; 15.02.2011