2011-01-20 26 views
5

Estoy intentando implementar un tiempo de espera HttpWebRequest para mi aplicación WP7, ya que el usuario podría hacer una solicitud, y la solicitud nunca volverá, dejando una ProgressBar que tengo en la pantalla.HttpWebRequest Timeout en WP7

vi esta página de MSDN: msdn page

Qué utiliza

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

pude añadir este código, y enlazar todas las variables, pero cuando lo añado a mi código, Da un NotSupportedOperation al llegar a la línea:

allDone.WaitOne(); 

Si comento hacia fuera, da la misma NotSupportedOperation en mi línea siguiente,

return _result_object; (función es private object SendBeginRequest())

¿Cómo puedo añadir un tiempo de espera en WP7? De esta manera no parece funcionar. Preferiría no utilizar WebClient debido al problema del hilo de UI.

Respuesta

6

En caso de que se haya perdido, se supone que allDone es ManualResetEvent, y puede pasar un número entero de milisegundos o un TimeSpan como la cantidad de tiempo de espera antes de continuar. Por ejemplo:

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

Alternativamente, se puede utilizar una biblioteca de terceros tales como Hammock, lo que permitirá hacer un syou tiempos de espera y reintentos (entre otras cosas). Dependiendo de su proyecto, eso podría ser más de lo que necesita, aunque :)

+0

Esto funcionó muy bien, ¡gracias! –