2011-01-20 16 views
5

Próbuję wprowadzić limit czasu HttpWebRequest dla mojej aplikacji WP7, ponieważ użytkownik może złożyć żądanie, a żądanie nigdy nie wróci, pozostawiając na pasku ProgressBar.HttpWebRequest Limit czasu w WP7

widziałem tej strony MSDN: msdn page

który wykorzystuje

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

udało mi się dodać ten kod, a następnie połączyć się wszystkie zmienne, ale kiedy dodać go do mojego kodu, to daje NotSupportedOperation gdy dotarcie do linii:

allDone.WaitOne(); 

Jeśli mogę skomentować go, daje taką samą NotSupportedOperation w moim następnym wierszu

return _result_object; (funkcja jest private object SendBeginRequest())

Jak mogę dodać timeout w WP7? Ten sposób nie działa. Wolałbym nie używać WebClient ze względu na problem z wątkiem UI.

Odpowiedz

6

W przypadku, gdy nie zauważył, allDone ma być ManualResetEvent i można przejść albo całkowitą liczbę milisekund lub Okres jako ilość czasu oczekiwania przed kontynuowaniem. Na przykład:

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. 
     } 
    }

Alternatywnie, można użyć biblioteki strony trzeciej, takich jak Hammock, które umożliwiają syou zrobić limity czasu i ponowić próby (między innymi). W zależności od twojego projektu może to być więcej niż potrzebujesz :)

+0

To działało świetnie, dzięki! –