3

我试过了,我希望将网站的源内容下载到一个字符串:

public partial class Form1 : Form
    {
        WebClient client;
        string url;
        string[] Search(string SearchParameter);


        public Form1()
        {
            InitializeComponent();

            url = "http://chatroll.com/rotternet";
            client = new WebClient();




            webBrowser1.Navigate("http://chatroll.com/rotternet");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        static void DownloadDataCompleted(object sender,
           DownloadDataCompletedEventArgs e)
        {



        }


        public string SearchForText(string SearchParameter)
        {
            client.DownloadDataCompleted += DownloadDataCompleted;
            client.DownloadDataAsync(new Uri(url));
            return SearchParameter;
        }

我想使用 WebClient 和 downloaddataasync 并最终将网站源内容放在一个字符串中。

4

3 回答 3

7

真的不需要异步:

var result = new System.Net.WebClient().DownloadString(url)

如果您不想阻止您的 UI,您可以将上述内容放在 BackgroundWorker 中。我建议使用此方法而不是 Async 方法的原因是因为它使用起来非常简单,并且因为我怀疑您无论如何都会将此字符串粘贴到 UI 中的某个地方(BackgroundWorker 将使您的生活更轻松)。

于 2012-08-09T20:02:44.607 回答
6

如果您使用的是 .Net 4.5,

public async void Downloader()
{
    using (WebClient wc = new WebClient())
    {
        string page = await wc.DownloadStringTaskAsync("http://chatroll.com/rotternet");
    }
}

对于 3.5 或 4.0

public void Downloader()
{
    using (WebClient wc = new WebClient())
    {
        wc.DownloadStringCompleted += (s, e) =>
        {
            string page = e.Result;
        };
        wc.DownloadStringAsync(new Uri("http://chatroll.com/rotternet"));
    }
}
于 2012-08-09T20:16:25.303 回答
5

使用WebRequest

WebRequest request = WebRequest.Create(url);
request.Method = "GET";
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string content = reader.ReadToEnd();
reader.Close();
response.Close();

您可以轻松地从另一个线程中调用代码,或使用后台佩戴者 - 这将使您的 UI 在检索数据时响应。

于 2012-08-09T20:14:21.823 回答