我可以尝试从 url 获取字符串,但是当我做程序 GUI 时
冻结如果你的目标是 .NET 4.5 之前,则没有 async/await - 相反,您可以使用DownloadStringAsync
的异步版本,它在下载字符串时引发事件
var client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompletedHandler);
for (long i = 1; i < gethow; i++)
{
string WebAdress = "https://xxxxxx.xxx/web?id=";
var request = WebAdress + (fromNumber - 1 + i);
client.DownloadStringAsync(request);
}
// -- > Elsewhere in your form
void DownloadStringCompletedHandler(object sender, DownloadStringCompletedEventArgs e)
{
slas = "0" + Convert.ToString((fromNumber - 1 + i));
if (e.Result == "Test")
{
if (!listBox1.Items.Contains(slas))
{
listBox1.Items.Add(slas);
godn++;
}
}
}
如果所有代码都必须在按钮单击中,则可以内联事件处理程序
var client = new WebClient();
client.DownloadStringCompleted += (s,e) => {
slas = "0" + Convert.ToString((fromNumber - 1 + i));
if (e.Result == "Test")
{
if (!listBox1.Items.Contains(slas))
{
listBox1.Items.Add(slas);
godn++;
}
}
};
for (long i = 1; i < gethow; i++)
{
string WebAdress = "https://xxxxxx.xxx/web?id=";
var request = WebAdress + (fromNumber - 1 + i);
client.DownloadStringAsync(request);
}
编辑:您已将问题中的代码更新为类似于此答案,但您假设DownloadStringAsync
返回结果 - 它没有。该方法不返回任何内容。字符串在事件处理程序中返回
var client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompletedHandler);
result=client.DownloadStringAsync(request); // <-- This line is wrong
它应该是
client.DownloadStringAsync(request);
并接收DownloadStringCompletedHandler
内的字符串作为e.Result