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

标签 c# windows windows-store-apps

在进行 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/

相关文章:

c# - 更改 List<Texture> 的项目会创建一个新项目

c# - 使用 Automapper 映射对象列表

c# - while 循环 C# 的登录系统问题

c# - 确定 UDP 主机是否可达?

c# - Xamarin、MySQL 异常 : unable to connect to any specific host

c# - 如何在 GUI 线程中执行代码?

python - Python安装libs文件夹中的python3.lib和python3x.lib有什么区别?

.net - Windows 找不到最新安装的 .NET SDK

windows - 为什么 Windows Smart Screen 突然出现 'protecting' PC 因为购买了新证书

c# - 使用 C# 在 Windows 8 上获取当前线程 ID