1

外部Webサービスでユーザーを認証するこのアプリがあり、認証されると別のビューに移動する必要があります。

認証はHttpWebRequestで行われます。

    private void btnLogin_Click(object sender, RoutedEventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create("http://webservice");
        request.Method = "GET";
        request.BeginGetResponse(new AsyncCallback(CheckLogin), request);
    }

次に、コールバックがあります。

    private void CheckLogin(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        bool success = false;

        try
        {
            // End the operation
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
            Stream streamResponse = response.GetResponseStream();
            StreamReader streamRead = new StreamReader(streamResponse);
            string responseString = streamRead.ReadToEnd();
            if (responseString.Contains("ok"))
            {
                success = true;
            }

            streamResponse.Dispose();
            streamRead.Dispose();
            response.Dispose();
        }
        catch (Exception e)
        {

        }

        request.Abort();
        request = null;

        if (success)
        {
            this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Frame.Navigate(typeof(Main2));
            }).AsTask().Wait();
        }
    }

これは、Visual Studioでデバッグする場合は完全に機能しますが、アプリケーションを公開してパッケージをインストールすると、Frame.Navigateでハングします。これは、CheckLoginメソッドがUIスレッドで実行されていないためだと思います。

バックグラウンドスレッドでFrame.Navigate(..)を実行する方法に関するアイデアはありますか?

4

1 に答える 1

0

Dispatcher.RunAsync と Frame.Navigate の間には実際の問題はないようです。だから私はあなたが正しい方向を見ていないと思います。

ナビゲーションではなく、ページのコンテンツに問題がある可能性があります。

于 2012-10-12T09:43:36.133 に答える