gpt4 book ai didi

c# - CredentialPickerResults 调用后被跳过的代码

转载 作者:可可西里 更新时间:2023-11-01 11:34:02 25 4
gpt4 key购买 nike

在进行 CredentialPickerResults 调用后,我的代码被跳过。没有显示登录界面,代码跳转到下一个函数,没有完成当前函数中的代码。

它完全跳过 Global.strUsername = credResults.CredentialUserName 和密码,直接进入 GetData() 函数。

public MainPage()
{
this.InitializeComponent();
GetCredentials();
GetData();
}

private async void GetCredentials()
{
CredentialPickerOptions credOptions = new CredentialPickerOptions()
{
AuthenticationProtocol = AuthenticationProtocol.Basic,
CredentialSaveOption = CredentialSaveOption.Selected,
CallerSavesCredential = true,
Caption = "Login",
Message = "Please enter your credentials",
TargetName = ".",
};

CredentialPickerResults credResults = await CredentialPicker.PickAsync(credOptions);

Global.strUsername = credResults.CredentialUserName;
Global.strPassword = credResults.CredentialPassword;
}

private async void GetData()
{
//get data
}

最佳答案

您需要等待 GetCredentials 返回。使用您当前的代码,您只需以“即发即弃”的方式异步启动它,然后转到 GetData。这就是 GetDataGetCredentials 完成之前执行的原因。

您应该首先更改 GetCredentialsGetData 的签名以返回 Task˙ 以便您可以等待它们。

private async Task GetCredentials()
{
// get credentials
}

private async void GetData()
{
// get data
}

由于您不能在构造函数中等待异步调用,您可以使用辅助函数来解决这个问题,您将在“即发即弃”模式下调用该辅助函数,但等待其中的其他调用:

public MainPage()
{
this.InitializeComponent();
Init();
}

public async void Init()
{
await GetCredentials();
await GetData();
}

这样您应该能够实现所需的行为。

关于c# - CredentialPickerResults 调用后被跳过的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com