我有这个应用程序使用外部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(..)的任何想法?
答案 0 :(得分:0)
Dispatcher.RunAsync和Frame.Navigate之间似乎没有真正的问题。所以我假设你没有朝着正确的方向前进。
也许您的网页内容有问题,而不是导航。