WebClient.DownloadStringAsync не работает с эмулятором WP7 - PullRequest
2 голосов
/ 15 февраля 2011

Привет,

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

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 вращается, но значение результата никогда не обновляется.консоль это TextBox.Есть мысли о том, что может происходить?

Спасибо,

FM

1 Ответ

4 голосов
/ 15 февраля 2011

Я не вижу цели цикла, который у вас есть в вашем коде, а также строки 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 вы получите источник страницы - он постоянный и не меняется (в отличие от динамического канала), поэтому вам не нужен цикл там.

...