C#如果它超过2秒需要更长的时间如何停止的方法?(C# How to stop a method i

2019-09-16 20:00发布

下面的程序将连接到网络,并获得“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);
    }
}

Answer 1:

如上文所述.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");
        }
    }


Answer 2:

两秒钟的时间太长 ,以阻止用户界面。 您应该只阻止用户界面,如果你在获得结果的规划,说五十毫秒以下。

阅读这篇文章,就如何做一个网络请求,而不阻塞UI:

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

请注意,这都将是C#5,这是测试版目前要容易得多。 在C#5,你可以简单地使用await操作异步等待任务的结果。 如果您想怎么看这样的事情会工作在C#5,请参阅:

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



Answer 3:

设置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();


Answer 4:

您可以使用超时属性上的HttpWebRequest



Answer 5:

考虑切换到内容的异步下载。 您将停止阻止UI线程,将能够轻松地处理多个请求。 您将能够显著增加超时而对UI的影响,并且一旦接收到响应,如果你仍然想获取的数据可以决定。



文章来源: C# How to stop a method if it takes longer than 2 seconds?
标签: c# timer