2012-10-14 11 views
13

我正在寫一個程序,當textBox1的變化:如何限制DownloadString(url)允許的時間爲500毫秒?

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

我想限制由500毫秒允許的時間DownloadString(URL)。如果超過,取消它。

回答

25

有沒有這樣的屬性,但你可以很容易地擴展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); 
+0

有一個問題,一個流行的匯率站點,站點允許的連接錯誤,但他們的API沒有發送響應 - 這個小金塊是理想的補丁,非常有義務。 –

+1

現在我再看一遍,學到足夠的知道你的答案很直接地回答我的問題。更改已接受您的答案。 – Sakura

7

執行此操作的一種方法是對WebClient類使用DownloadStringAsync方法,然後在500毫秒後異步調用CancelAsync方法。有關如何做到這一點的一些提示,請參閱備註部分here

或者,您可以改用WebRequest類,它具有Timeout屬性。請參閱代碼示例here