簡體   English   中英

WP7中的HttpWebRequest超時

[英]HttpWebRequest Timeout in WP7

我正在嘗試為我的WP7應用程序實現HttpWebRequest超時,因為用戶可以發出請求,並且該請求將永遠不會回來,而在屏幕上卻留下了ProgressBar。

我看到了這個MSDN頁面: msdn頁面

哪個用途

ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);

我能夠添加此代碼,並鏈接所有變量,但是當我將其添加到代碼中時,到達該行時會給出NotSupportedOperation

allDone.WaitOne();

如果我將其注釋掉,它將在下一行給出相同的NotSupportedOperation

return _result_object; (函數是private object SendBeginRequest()

如何在WP7中添加超時? 這種方式似乎行不通。 由於UI線程問題,我寧願不使用WebClient。

萬一您錯過了它, allDone應該是一個ManualResetEvent ,並且您可以傳遞整數毫秒或TimeSpan作為等待繼續的時間。 例如:

private ManualResetEvent _waitHandle = new ManualResetEvent(false);
private bool _timedOut;

...
    this._timedOut = false;
    this._waitHandle.Reset();
    HttpWebRequest request = HttpWebRequest.CreateHttp("http://cloudstore.blogspot.com");
    request.BeginGetResponse(this.GetResponse_Complete, request);

    bool signalled = this._waitHandle.WaitOne(5);
    if (false == signalled)
    {
        // Handle the timed out scenario.
        this._timedOut = true;
    }

    private void GetResponse_Complete(IAsyncResult result)
    {
        // Process the response if we didn't time out.
        if (false == this._timedOut)
        {
            HttpWebRequest request = (HttpWebRequest)result.AsyncState;
            WebResponse response = request.EndGetResponse(result);

            // Handle response. 
         }
     }

另外,您可以使用第三方庫,例如Hammock ,它使syou可以執行超時和重試嘗試(以及其他功能)。 但是,根據您的項目,這可能超出您的需求:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM