Webclient调用DownloadString导致我的应用程序冻结

时间:2013-08-11 18:54:08

标签: c#

string[] strArray = new WebClient().DownloadString("MYSITE").Split(new char[1]
                {
                    ','
                });

每当我使用此代码时,我的应用程序会冻结,直到获取信息,有没有办法阻止冻结?

3 个答案:

答案 0 :(得分:4)

DownloadString是一个阻止通话。只有在提交响应后才会返回控制权。要使您的UI响应,请使用:  await DownloadStringTaskAsync或   使用ThreadPool中的一个帖子。

如果您不知道如何使用async await

async void yourMethod()
{
   string html = await webClient.DownloadStringTaskAsync(uri);
   if(!string.IsNullOrEmpty(html))
      var htmlSplit = html.Split(',');
}

答案 1 :(得分:1)

如果您在主线程上下载某些内容,该应用将停止更新用户界面,您的应用将冻结,直到完成下载。

您需要致电DownloadStringAsync,因此会将其下载到另一个帖子中:

WebClient client = new WebClient();
string[] strArray;
client.DownloadStringCompleted += (sender, e) => 
{
  // do something with the results
  strArray = e.Result.Split(new char[1] { ',' });
};
client.DownloadStringAsync("MYSITE");

答案 2 :(得分:0)

您也可以创建一个帖子:

Thread download = new Thread(DownloadString);
download.Start();

private void DownloadString()
{
    string[] strArray = new WebClient().DownloadString("MYSITE").Split(new char[1]
            {
                ','
            });
}