В C# Как остановить метод, если он занимает больше 2 секунд?
следующая программа подключится к сети и получит html-содержимое "msnbc.com" веб-страница и распечатайте результат. Если для получения данных с веб-страницы требуется более 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);
}
}
5 ответов
Как указано выше .Ожидания
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");
}
}
две секунды-это слишком долго для блокировки пользовательского интерфейса. Вы должны блокировать пользовательский интерфейс, только если вы планируете получить результат, скажем, пятьдесят миллисекунд или меньше.
прочитайте эту статью о том, как сделать веб-запрос Без блокировки пользовательского интерфейса:
http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/
обратите внимание, что все это будет намного проще в C# 5, который в настоящее время находится в бета-версии. В C# 5, Вы можете просто использовать the await
оператор для асинхронного ожидания результата задачи. Если вы хотите увидеть, как это будет работать в C# 5, см.:
рассмотрите возможность переключения на асинхронную загрузку содержимого. Вы будет блокировать поток пользовательского интерфейса и сможете легко обрабатывать несколько запросов. Вы сможете значительно увеличить время ожидания без влияния на пользовательский интерфейс и можете принять решение о получении ответа, если вы все еще хотите получить данные.