Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wait for HttpWebRequest.BeginGetResponse to finish in Windows Phone 7

I'm trying to use the async HttpWebRequest in Silverlight for Windows Phone. All works perfect until I get to the where I should call

private static ManualResetEvent allDone = new ManualResetEvent(false);
...
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
allDone.WaitOne();
Debug.WriteLine("All done!");

In GetResponseCallback:

private void GetResponseCallback(IAsyncResult asynchronousResult)
{
    try
    {
        request = (HttpWebRequest)asynchronousResult.AsyncState;
        response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        allDone.Set();
    }
    catch (Exception e)
    {
        Debug.WriteLine("Got Exception in GetResponseCallback: " + e.Message);
    }
}

After the call to allDone.WaitOne(); it just hangs...

Any suggestions on why?

like image 235
greve Avatar asked Feb 26 '23 23:02

greve


1 Answers

This just takes a bit of a shift in thinking away from blocking/waiting to thinking in async terms on the WP7 platform. The result is the user is always able to interact with the UI.

Move a call to your completion code (writeline in this case) into your CompletedEventHandler and for any UI updates marshall back to the UI thread with

Dispatcher.BeginInvoke( () => { /* your UI update code */ } )

If there are any UI elements that should not be interacted with while your async op is executing then these controls can be hidden or disabled for the interim.

like image 166
Mick N Avatar answered Apr 07 '23 20:04

Mick N