为啥WebClient
Posted
技术标签:
【中文标题】为啥WebClient【英文标题】:Why does WebClien为什么WebClient 【发布时间】:2017-12-31 16:18:35 【问题描述】:我可以尝试从 url 获取字符串,但是当我执行程序时 GUI 冻结
【问题讨论】:
您的目标是什么版本的 .NET? 它会冻结,因为 WebClient 是同步的,所以它会阻塞整个循环。 我使用 .Net 3.5,所以 – Fran 我必须做什么? 最简单的方法是将代码放入将异步运行的后台工作中。 另外,MyIrancell BruteForce [ Status : Attacking ]
在您的问题中的存在让人有些怀疑!
【参考方案1】:
如果您在 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
接收
【讨论】:
好,但我不喜欢上课(所有作品都必须我在按钮内) @Pwn3rGamer 恐怕评论没有意义。你的意思是?我说的班级是你的表格! 结果在哪里?结果里面的结果必须从url下载字符串 所有工作都必须在按钮内我在 UI 代码中闻到(重)逻辑...@Pwn3rGamer 你应该把代码放到另一个类中,当按钮被点击...直接在事件处理程序中为 buttonclick 编写逻辑并不好s
是事件的发送者(可能是 webclient 实例)。 e
是包含响应信息的事件参数(在这种情况下是下载结果)以上是关于为啥WebClient的主要内容,如果未能解决你的问题,请参考以下文章
Monotouch Webclient.CancelAsync ThreadInterruptedException