string[] strArray = new WebClient().DownloadString("MYSITE").Split(new char[1]
{
','
});
每当我使用此代码时,我的应用程序都会冻结,直到它获取信息,有没有办法停止冻结?
string[] strArray = new WebClient().DownloadString("MYSITE").Split(new char[1]
{
','
});
每当我使用此代码时,我的应用程序都会冻结,直到它获取信息,有没有办法停止冻结?
DownloadString
是阻塞调用。仅在提交响应后才返回控制权。要使您的 UI 具有响应性,请使用:
await DownloadStringTaskAsync
或使用ThreadPool
.
如果您不知道如何使用async await
:
async void yourMethod()
{
string html = await webClient.DownloadStringTaskAsync(uri);
if(!string.IsNullOrEmpty(html))
var htmlSplit = html.Split(',');
}
如果您在主线程上下载某些内容,应用程序将停止更新 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");
您也可以只创建一个线程:
Thread download = new Thread(DownloadString);
download.Start();
private void DownloadString()
{
string[] strArray = new WebClient().DownloadString("MYSITE").Split(new char[1]
{
','
});
}