如果您在 4.5 之前以 .NET 为目标,则没有 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 接收