获取没有UI冻结的远程URL字符串?

时间:2013-03-25 13:35:07

标签: c#

我有一个如下方法来获取远程URL字符串。

public string FnGetURLContent(string _QsURL)
        { 
            string _Return = "";

            try
            {    
                HttpWebRequest _HttpWebRequest = (HttpWebRequest)WebRequest.Create(_QsURL);
                _HttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)";

                _HttpWebRequest.MaximumAutomaticRedirections = 4;
                _HttpWebRequest.MaximumResponseHeadersLength = 4;

                _HttpWebRequest.Credentials = CredentialCache.DefaultCredentials;
                HttpWebResponse _HttpWebResponse = (HttpWebResponse)_HttpWebRequest.GetResponse();

                Stream receiveStream = _HttpWebResponse.GetResponseStream();

                encoding format. 
                StreamReader _StreamReader = new StreamReader(receiveStream, Encoding.UTF8);

                _Return = _StreamReader.ReadToEnd();
                _HttpWebResponse.Close();
                _StreamReader.Close();

            }
            catch (WebException _WebException)
            {
                _Return = "";
            }

            return _Return;

        }

当方法运行时,表单UI冻结,直到方法完成处理。 我该如何改进代码?

提前谢谢

4 个答案:

答案 0 :(得分:2)

您可以使用异步background worker“改进代码”。请参阅class here

答案 1 :(得分:2)

您可以使用_HttpWebRequest.GetResponseAsync()并在收到响应数据后在单独的线程上处理。

答案 2 :(得分:0)

有很多方法可以做到这一点。你可以这样做:

  1. 你可以使用关键词:async和await,它附带.net 4.5(Link
  2. 您可以使用背景工作者(Link
  3. 您可以开始新的主题(Link
  4. 有很多方法可以实现您的目标

答案 3 :(得分:0)

这是node.js的生活目的。关键是要使这个异步。对于您的情况,请参阅msdn docs here