WebRequest挂起用户界面

use*_*223 2 .net c# multithreading httpwebrequest

我正在使用WebRequest做简单的请求,应用程序只是挂起,直到响应回来.我该如何解决?

我已经阅读了很多主题,他们都说要使用线程.我不知道如何使用它们; 任何人都可以提供以下不挂起用户界面的示例吗?

private string SimpleRequest(String url)
{
    WebRequest request = WebRequest.Create(url);
    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);
    string result = reader.ReadToEnd();
    stream.Dispose();
    reader.Dispose();
    return result;
}

private void button1_Click(object sender, EventArgs e)
{
    String googleHtml = simpleRequest("https://facebook.com");
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

L.B*_*L.B 8

如果您使用的是c#5.0,那就太容易了

public async void Test1()
{
      WebClient wc = new WebClient();
      richTextBox1.Text =  await wc.DownloadStringTaskAsync("https://facebook.com");
}
Run Code Online (Sandbox Code Playgroud)

您可以将方法转换为awaitable

private Task<string> simpleRequest(String url)
{
    return Task.Factory.StartNew(() =>
        {
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            string result = reader.ReadToEnd();
            stream.Dispose();
            reader.Dispose();
            return result;
        });
}
Run Code Online (Sandbox Code Playgroud)

并打电话给

public async void Test2()
{
      richTextBox1.Text =  await simpleRequest("https://facebook.com");
}
Run Code Online (Sandbox Code Playgroud)

对于C#的较低版本,请参阅其他答案.