WebClient.DownloadStringAsync不能与WP7模拟器一起使用

时间:2011-02-15 05:03:55

标签: c# windows-phone-7 webclient webclient-download

问候,

我正在尝试使用以下代码下载网页:

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循环正在旋转,但结果的值永远不会被更新。 console是一个TextBox。对可能发生的事情的任何想法?

谢谢,

FM

1 个答案:

答案 0 :(得分:4)

我没有看到你的代码中的循环的目的,以及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,您将获得页面源 - 它是常量且不会更改(与动态源不同),因此您不需要循环。