在进行 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
。这就是 GetData
在 GetCredentials
完成之前执行的原因。
您应该首先更改 GetCredentials
和 GetData
的签名以返回 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/