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

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

4

3 回答 3

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(',');
}
于 2013-08-11T18:57:06.373 回答
1

如果您在主线程上下载某些内容,应用程序将停止更新 UI,并且您的应用程序将冻结,直到完成下载。

您需要调用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");
于 2013-08-11T19:03:24.980 回答
0

您也可以只创建一个线程:

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

private void DownloadString()
{
    string[] strArray = new WebClient().DownloadString("MYSITE").Split(new char[1]
            {
                ','
            });
}
于 2013-08-11T19:01:37.597 回答