与HttpWebRequest的ManualResetEvent的WP7上(ManualResetE

2019-10-17 01:12发布

刚开始时,这可能会被标记为以下螺纹的副本: 等待HttpWebRequest.BeginGetResponse在Windows Phone 7的完成 ,然而,在该线程的答复并没有帮助我获得了我的问题。

首先,我收集用户数据的UI线程以处理应用程序注册,在那里我也有ManualResetEvent的实例开始:

private static ManualResetEvent registrationEvent = new ManualResetEvent(false);

我有另一个线程,其处理登记过程(并且包括HttpWebRequest.BeginGetResponse()和其对应的回调方法。)

Thread t = new Thread(() => RegistrationHandler.sendRegistrationData(url));
t.Start();

这个电话后,我阻止了调用当前(UI)线程

registrationEvent.WaitOne();

//Process the response, update some UI elements and navigate to a different page.
httpSessionCompleted(response);

一旦线程处理登记处理开始,我实例HttpWebRequest和调用就可以了BeginGetResponse()方法。

try
{
    HttpWebRequest request = HttpWebRequest.CreateHttp(url);
    request.Method = "POST";
    request.ContentType = mimeType;

    request.BeginGetResponse(new AsyncCallback(GetRequestCallback), request);
}
catch (Exception ex)
{
    Console.WriteLine("Exception caught in sendData(): {0}", ex.Message);
}

现在的问题是,回调方法(下面的代码)永远不会被调用,应用程序只是冻结。 此外,还似乎没有任何被抛出的异常(S)。

try
{
    HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

    if (request != null)
    {
        using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult))
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        String result = reader.ReadToEnd();
                        Globals.HostResponse = result;
                        //Signalling the calling thread to continue execution
                        RegistrationPage.RegistrationEvent.Set();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception caught in GetRequestCallback(): {0}", ex.Message);
        }

我最好要我的应用程序从httpSessionCompleted继续()回调方法执行完毕后。 是否有人可以帮助我一些指导/建议吗?

对不起,是冗长。 谢谢!

Answer 1:

你不应该阻止UI thread ,使用回调格局来代替。 看看这个: Windows Phone 7的-等待Web客户端来完成 。 希望这可以帮助



文章来源: ManualResetEvent with HttpWebRequest on WP7