【发布时间】:2012-04-27 16:18:25
【问题描述】:
以下程序将连接到网络并获取“msnbc.com”网页的html内容并打印出结果。如果从网页获取数据的时间超过 2 秒,我希望我的方法停止工作并返回。你能告诉我如何用一个例子来做到这一点吗?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
gethtml();
MessageBox.Show("End of program");
}
public void gethtml()
{
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://msnbc.com/");
WebResponse Response = WebRequestObject.GetResponse();
Stream WebStream = Response.GetResponseStream();
StreamReader Reader = new StreamReader(WebStream);
string webcontent = Reader.ReadToEnd();
MessageBox.Show(webcontent);
}
}
【问题讨论】:
-
你可能想在一个线程中执行获取,如果超过两秒就中止线程(通过计时器设置/调用)。
-
@ashes999:这是一个非常非常糟糕的主意。 只有在您打算取消整个进程时才中止线程。 中止线程应该是最后的手段。中止托管线程可能会任意破坏数据结构。
-
非常感谢您的所有回答。
-
@EricLippert 我们在 Silverlight 中的做法是创建一个可取消的 BackgroundWorker,它是可中止的。也许我应该更精确:)
-
@ashes999:安全中止不是线程的属性;它是线程正在做什么的属性。 线程是否会改变共享数据结构并在线程中止时使其处于无效状态?是相关问题。