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 回答