与HTTPWEBREQUEST混淆

时间:2011-12-17 10:10:41

标签: c# winforms visual-studio-2010

我有时会在列表中找到70个人的连接列表,有时候1000个,我在它上面放一个循环并开始使用HTTPWEBREQUEST逐个获取它们,我有一个文本框,一直显示我在哪里,10-15或200等,

我的问题是我有一个停止按钮,当我按下停止按钮我希望它突破它,我怎么能实现呢?

当我按下停止时,我不清楚该怎么办?因为表单(它是一个Windows窗体应用程序)被卡住/挂起直到它完成...

感谢任何帮助, 提前谢谢。

2 个答案:

答案 0 :(得分:1)

听起来你正在做UI线程中的所有工作。相反,您应 使用异步Web请求(可能使用WebClient在工作线程中进行下载(例如,使用BackgroundWorker)。这样您的UI将保持响应,并且您可以使用某种共享标志来指示您是否应该继续处理列表。请注意,您将要使用volatile,锁定或Interlocked类,以确保在工作线程中可以看到对UI线程中的共享标志所做的更改。

另一种方法是使用.NET 4中的任务并行库(TPL),cancellation token。这有点先进,但从长远来看会更清洁。

请注意,C#5会使异步变得更加容易。

答案 1 :(得分:0)

您应该使用BackgroundWorker执行此任务,这样您的用户界面就不会阻止。所有长时间运行的操作都应该在与UI线程不同的线程上运行,以便UI保持响应。后台工作程序使用CancelAsync()方法支持取消。