1

私はこのコードを書きました:

private void button1_Click(object sender, RoutedEventArgs e)
    {
        HttpWebRequest request = SendRequests.CreateRequest(serverTextBox.Text);
        IAsyncResult result = request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
    }

    private void ReadWebRequestCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

            using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
            {
                string results = httpwebStreamReader.ReadToEnd();
                loginValue = Parser.ParseLoginValue(results);
            }
            myResponse.Close();
        }
        catch (WebException we)
        {
            //
        }
    }

この時点での問題は、ボタンをクリックした後、アプリケーションの実行を続行するには、BeginGetResponse の戻り値 (ここでは loginValue) が必要なことです。これが非同期呼び出しの全体的な意味に反していることはわかっていますが、メイン スレッドに進む前に結果を待つ方法はありますか?

4

1 に答える 1

2

残念ながら、あなたはあなた自身の質問に答えました。Windows Phone では、同期 Web 通話を行う方法がありません。

しかし、あなたは本当にする必要はありません。Web からの応答を待っている間にユーザーが本当に何もすることがない場合は、半透明のオーバーレイにプログレス バーを表示して (または、システムの試行でグローバル プログレス バーを使用することをお勧めします)、そのままにしておいてください。

対照的に、インターネットからの同期呼び出しが返されるのを待っている場合 (モバイル デバイスでは時間がかかる可能性があります)、UI がロックされ、ユーザーはアプリケーションがハングしたと考えるでしょう (技術的には、これは正しいことです)。 )。

非同期性はあなたの友達です。それとうまく遊んでください。

于 2012-08-18T20:04:25.693 に答える