Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未在Visual Studio中调试应用程序时挂起_C#_Windows_Microsoft Metro_Windows Runtime - Fatal编程技术网

C# 未在Visual Studio中调试应用程序时挂起

C# 未在Visual Studio中调试应用程序时挂起,c#,windows,microsoft-metro,windows-runtime,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");

我有这个应用程序,它可以通过外部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();
        }
    }
在VisualStudio中调试时,这可以完美地工作,但当我发布应用程序并安装包后,它将挂起在Frame.Navigate上。我猜这是因为CheckLogin方法没有在UI线程中运行


关于如何在后台线程中Frame.Navigate(..)有什么想法吗?

Dispatcher.RunAsync和Frame.Navigate之间似乎没有真正的问题。所以我想你看的方向不对


可能您的页面内容错误,而不是导航错误。

为什么要以异步方式导航?我还尝试跳过Dispatcher.RunAsync(…);和调用框架。直接导航,但它也不工作。你能提供更多的代码,这样我就可以理解你的线程是如何创建的/如何调用CheckLogin的?谢谢Nicolas的关注。我已经更新了代码以包含更多细节。在
Dispatcher.RunAsync
Frame.Navigate
之间似乎没有真正的问题。所以我想我们看的方向不对。当您说在调试中不挂起时,您是处于调试模式还是发布模式?尝试查看
Main2
中对
OnNavigatedTo
的重写,该重写不调用
base.OnNavigatedTo()
Dispatcher.Invoke。我能够使用Dispatcher的唯一方法是使用Dispatcher.RunAsync(..)好的,我的错。现在我明白了,您的方法是在另一个线程上执行的,您希望调用导航调用。我将编辑我的帖子