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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With