在Visual Studio中未进行调试时应用程序挂起

时间:2012-10-12 09:38:04

标签: c# windows microsoft-metro windows-runtime

我有这个应用程序使用外部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(..)的任何想法?

1 个答案:

答案 0 :(得分:0)

Dispatcher.RunAsync和Frame.Navigate之间似乎没有真正的问题。所以我假设你没有朝着正确的方向前进。

也许您的网页内容有问题,而不是导航。