У меня есть этот код при загрузке URL:
private List<string> test(string url, int levels,DoWorkEventArgs eve)
{
HtmlWeb hw = new HtmlWeb();
List<string> webSites;
try
{
this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, "Loading The Url: " + url + "..." , Color.Red); }));
doc = hw.Load(url);
this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, "Done " + Environment.NewLine, Color.Red); }));
Иногда, когда его загрузка URL-адреса занимает много времени, поскольку веб-сайт в переменной URL-адреса не отвечает. Я хочу добавить тайм-аут, так что скажем, через X секунд он выдает сообщение типа «был тайм-аут».
Теперь у HtmlAgilityPack нет никакого свойства или класса timeout. Поэтому я решил создать новую функцию в моей Form1, которая будет использовать webrequest и webresponde, и установить тайм-аут в этой новой функции, а затем вызвать эту функцию перед загрузкой url.
Может ли кто-нибудь показать мне, как заставить новую функцию работать с моим кодом? Также с тайм-аутом.
Благодарю.
Я ничего не знаю о тайм-ауте html
agility. но я использую его вот так. Может быть, это полезно для вас. Удачи.
String Data = GetURLData(url);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(Data);
public static string GetURLData(string URL)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.UserAgent = "Omurcek";
request.Timeout = 4000;
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}
catch (Exception ex )
{
LogYaz("Receive DATA Error : " + URL + ex.ToString());
return "";
}
}
Источник: http://blog.jongallant.com/2012/07/htmlagilitypack-set-timeout.html#.VBY-_fmSz3Q
var web = new HtmlWeb();
web.PreRequest = delegate(HttpWebRequest webRequest)
{
webRequest.Timeout = 4;
return true;
};
var doc = web.Load("http://www.msn.com/");