以下程序将连接到网络并获取"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);
    }
}
Eri*_*ert 12
两秒钟太长,无法阻止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
设置对象的Timeout属性WebRequest.文档
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();
如上所述。超时
    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");
        }
    }