C#如果超过2秒钟,如何停止方法?

以下程序将连接到网络并获取“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); } } 

如上所述.Timeout

  public void gethtml() { HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://msnbc.com/"); WebRequestObject.Timeout = (System.Int32)TimeSpan.FromSeconds(2).TotalMilliseconds; try { WebResponse Response = WebRequestObject.GetResponse(); Stream WebStream = Response.GetResponseStream(); StreamReader Reader = new StreamReader(WebStream); string webcontent = Reader.ReadToEnd(); MessageBox.Show(webcontent); } catch (System.Net.WebException E) { MessageBox.Show("Fail"); } } 

两秒钟太长,无法阻止UI。 如果您计划获得结果,例如50毫秒或更短,则应该只阻止UI。

阅读本文,了解如何在不阻止UI的情况下执行Web请求:

http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/

请注意,这在C#5中将更加容易,目前处于测试阶段。 在C#5中,您可以简单地使用await运算符异步等待任务的结果。 如果你想看看这种东西在C#5中是如何工作的,请参阅:

http://msdn.microsoft.com/en-us/async

设置WebRequest对象的Timeout属性。 文档

MSDN示例:

 // Create a new WebRequest Object to the mentioned URL. WebRequest myWebRequest=WebRequest.Create("http://www.contoso.com"); Console.WriteLine("\nThe Timeout time of the request before setting is : {0} milliseconds",myWebRequest.Timeout); // Set the 'Timeout' property in Milliseconds. myWebRequest.Timeout=10000; // This request will throw a WebException if it reaches the timeout limit before it is able to fetch the resource. WebResponse myWebResponse=myWebRequest.GetResponse(); 

您可以在HttpWebRequest上使用TimeOut属性

考虑切换到内容的异步下载。 您将停止阻止UI线程,并且可以轻松处理多个请求。 您将能够在不影响UI的情况下显着增加超时,并且如果您仍想获取数据,则可以决定是否接收响应。