2

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変数のWebサイトが応答しないため、時間がかかることがあります。タイムアウトを追加したいので、X秒後に「タイムアウトがありました」のようなメッセージをスローするとします。

現在、HtmlAgilityPackにはタイムアウトプロパティまたはクラスがありません。そこで、Form1でwebrequestとwebrespondeを使用する新しい関数を作成し、この新しい関数でタイムアウトを設定してから、URLを読み込む前にこの関数を呼び出すことを考えました。

誰かが私のコードで動作するように新しい関数を作成する方法を教えてもらえますか?また、タイムアウト付き。

ありがとう。

4

2 に答える 2

0

htmlアジリティのタイムアウトについては何も知りません。しかし、私はこのように使用しています。多分それはあなたに役立ちます。幸運を。

    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 "";
        }

    }
于 2012-09-18T04:41:01.517 に答える