C# 未在Visual Studio中调试应用程序时挂起
我有这个应用程序,它可以通过外部web服务对用户进行身份验证,并且在验证后应该导航到不同的视图 身份验证在HttpWebRequest中完成: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");
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(..)好的,我的错。现在我明白了,您的方法是在另一个线程上执行的,您希望调用导航调用。我将编辑我的帖子