18

我正在编写一个程序,当 textBox1 更改时:

URL = "http://example.com/something/";
URL += System.Web.HttpUtility.UrlEncode(textBox1.Text);
s = new System.Net.WebClient().DownloadString(URL);

我想将 DownloadString(URL) 允许的时间限制为 500 毫秒。如果超过,取消它。

4

2 回答 2

37

没有这样的属性,但您可以轻松扩展WebClient

public class TimedWebClient: WebClient
{
    // Timeout in milliseconds, default = 600,000 msec
    public int Timeout { get; set; }

    public TimedWebClient()
    {
        this.Timeout = 600000; 
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var objWebRequest= base.GetWebRequest(address);
        objWebRequest.Timeout = this.Timeout;
        return objWebRequest;
    }
}

// use
string s = new TimedWebClient {Timeout = 500}.DownloadString(URL);
于 2012-10-14T03:44:46.880 回答
7

一种方法是在 WebClient 类上使用 DownloadStringAsync 方法,然后在 500 毫秒后异步调用 CancelAsync 方法。有关如何执行此操作的一些指示,请参见此处的备注部分。

或者,您可以改用具有 Timeout 属性的 WebRequest 类。请参阅此处的代码示例。

于 2012-10-14T03:02:11.867 回答