Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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
Windows phone 7 在应用程序启动中执行异步方法_Windows Phone 7_Asynchronous - Fatal编程技术网

Windows phone 7 在应用程序启动中执行异步方法

Windows phone 7 在应用程序启动中执行异步方法,windows-phone-7,asynchronous,Windows Phone 7,Asynchronous,我尝试在我的应用程序中实现登录。我需要在页面开始加载之前登录,因为当一切正常时,我会转到第二页,如果不是第一页。为此,我将WMAppManifest设置为: <DefaultTask Name="_default" NavigationPage="" /> 异步方法登录: private async Task<bool> LogIn(string login, string password) { string str_login_number = login;

我尝试在我的应用程序中实现登录。我需要在页面开始加载之前登录,因为当一切正常时,我会转到第二页,如果不是第一页。为此,我将WMAppManifest设置为:

<DefaultTask Name="_default" NavigationPage="" />
异步方法登录:

private async Task<bool> LogIn(string login, string password)
{
    string str_login_number = login;
    string str_login_pass = password;


    JObject jo = new JObject();
    jo.Add("number", str_login_number);
    jo.Add("pass", str_login_pass);


    JsonWorker jWorker = new JsonWorker();
    var response = await jWorker.sendJSON("url", jo);
    string str_responseformjson = await jWorker.getJSON(response);

    jo = JObject.Parse(str_responseformjson);

    if (jo["response"].ToString().Equals("ok"))
    {
        return true;
    }
    else
    {
        return false;
    }

}
私有异步任务登录(字符串登录,字符串密码)
{
字符串str_login_number=登录名;
字符串str\u login\u pass=密码;
JObject jo=新的JObject();
添加(“编号”,str\u登录号);
jo.Add(“pass”,str\u login\u pass);
JsonWorker jWorker=新的JsonWorker();
var response=await jWorker.sendJSON(“url”,jo);
字符串str_responseformjson=await jWorker.getJSON(response);
jo=JObject.Parse(str_responseformjson);
if(jo[“response”].ToString().Equals(“ok”))
{
返回true;
}
其他的
{
返回false;
}
}
这是我的类JsonWorker的代码:

    class JsonWorker
    {

    public async Task<HttpWebResponse> sendJSON(string requestUrl, JObject jsonObjesct)
    {
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(requestUrl);
        request.ContentType = "text/plain; charset=utf-8";
        request.Method = "POST";

        byte[] jsonAsBytes = Encoding.UTF8.GetBytes(jsonObjesct.ToString());

        Stream x = await request.GetRequestStreamAsync();
        await x.WriteAsync(jsonAsBytes, 0, jsonAsBytes.Length);
        x.Close();

        HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync());
        return response;
    }

    public async Task<string> getJSON(
        HttpWebResponse response)
    {
        var stream = response.GetResponseStream();
        var sr = new StreamReader(stream);
        string str_responsefromjson = await sr.ReadToEndAsync();
        sr.Close();
        stream.Close();

        return str_responsefromjson;
    }
}
JsonWorker类
{
公共异步任务sendJSON(字符串requestUrl,JObject jsonObjesct)
{
HttpWebRequest request=(HttpWebRequest)WebRequest.Create(requestUrl);
request.ContentType=“text/plain;charset=utf-8”;
request.Method=“POST”;
byte[]jsonAsBytes=Encoding.UTF8.GetBytes(jsonobjest.ToString());
Stream x=等待请求。GetRequestStreamAsync();
wait x.WriteAsync(jsonAsBytes,0,jsonAsBytes.Length);
x、 Close();
HttpWebResponse=(HttpWebResponse)(wait request.GetResponseAsync());
返回响应;
}
公共异步任务getJSON(
HttpWebResponse(响应)
{
var stream=response.GetResponseStream();
var sr=新的流阅读器(流);
字符串str_responsefromjson=wait sr.ReadToEndAsync();
高级关闭();
stream.Close();
返回str_responsefromjson;
}
}

请提供帮助。

我的一个应用程序中有一些工作流。我用一个自定义的方法解决了这个问题。阅读本文了解更多信息

以下是一些基本知识。 UriMapper根据用户是否已输入正确的登录凭据来处理导航到哪个页面。如果之前提供了正确的凭据,应用中的激活和启动事件将始终登录

private void Application_Launching(object sender, LaunchingEventArgs e)
{
    RootFrame.UriMapper = new LoginUriMapper();

    if (AppSettings.HasLoginInfo)
    {
        Login();
    }
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    if (e.IsApplicationInstancePreserved == false)
    {
        // tombstoned! Need to restore state
        RootFrame.UriMapper = new LoginUriMapper();

        if (AppSettings.NotLoggedIn)
        { 
            Login();
        }
    }
}
如果登录失败,您的主页将处理逻辑,然后向后导航到登录页面。当您导航到登录页面时,请始终记住从导航堆栈中删除任何条目

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    while(NavigationService.CanGoBack)
    {
        NavigationService.RemoveBackEntry();
    }
}

为什么不将第一页保留为默认页,并仅在记录时转到第二页?@igrali它加载第一页,我实际上看到它几秒钟,它跳到第二页。这看起来不太好。使用一个扩展的启动屏幕页面如何?该页面将有一个附加的带有进度条的“登录”文本,以便用户知道发生了什么。如果登录失败,请转到第1页,否则请转到第2页?我为站点创建了应用程序,所以如果用户在站点上更改密码,将会发生什么情况,我每次都需要真正的登录来检查这一点。但我并没有向用户显示它,所以就像我获取了存储在存储器中的凭据一样,您将需要存储他们的信息。如果他们更改密码,则登录将失败。如果失败,请将其导航到登录页面。当导航到登录页面时,请记住始终清除backbackback,这样用户就不能点击back按钮并转到主页面欢迎!如果答案回答了您的问题,不要忘记将其标记为答案(并向上投票:)
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    while(NavigationService.CanGoBack)
    {
        NavigationService.RemoveBackEntry();
    }
}