1

まず、これは次のスレッドの複製としてタグ付けされている可能性があります: 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);
}

問題は、コールバック メソッド (以下のコード) が呼び出されず、アプリケーションがフリーズすることです。また、スローされる例外もないようです。

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() から続行したいと考えています。誰かがガイダンス/提案を手伝ってくれますか?

冗長で申し訳ありません。ありがとう!

4

1 に答える 1

0

をブロックしないでくださいUI thread。代わりにコールバック パターンを使用してください。これを見てください: Windows Phone 7 - Webclient が完了するのを待ちます。お役に立てれば

于 2012-07-16T16:46:17.460 に答える