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中是如何工作的,请参阅:
设置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的情况下显着增加超时,并且如果您仍想获取数据,则可以决定是否接收响应。