Windows 8.1 商店应用程序 OnCommandsRequested 在使用异步时不添加 ApplicationCommands

Windows 8.1 store apps OnCommandsRequested doesn't add ApplicationCommands when async used

在App.xaml.cs上我有以下代码

private async void OnCommandsRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs e)
    {
        var loader = ResourceLoader.GetForCurrentView();

        var generalCommand = new SettingsCommand("General Settings", "General Settings", handler =>
        {
            var generalSettings = new GeneralSettingsFlyout();
            generalSettings.Show();
        });
        e.Request.ApplicationCommands.Add(generalCommand);

        object data;
        IAuthService _authService = new AuthService();
        if (Global.UserId == 0)
            data = await _authService.GetSettingValueBySettingName(DatabaseType.GeneralDb, ApplicationConstants.GeneralDbSettingNames.ShowSupportInfo);
        else
            data = await _authService.GetSettingValueBySettingName(DatabaseType.UserDb, ApplicationConstants.UserDbSettingNames.ShowSupportInfo);

        if (data != null && data.ToString().Equals("1"))
        {
            var supportCommand = new SettingsCommand("Support", "Support", handler =>
            {
                var supportPane = new SupportFlyout();
                supportPane.Show();
            });
            e.Request.ApplicationCommands.Add(supportCommand);
        }

        var aboutCommand = new SettingsCommand("About", loader.GetString("Settings_OptionLabels_About"), handler =>
       {
           var aboutPane = new About();
           aboutPane.Show();
       });
       e.Request.ApplicationCommands.Add(aboutCommand);           

}

此代码添加设置 "General Settings" 但既不添加 "Support" 也不添加 "About" 命令。任何人都可以建议这段代码有什么问题吗?

您需要提前查询,然后添加已知命令,而不是在请求时从您的服务中查询命令。

您不能在 OnCommandsRequested 中使用 await。

一个方法returns当它到达第一个等待时,所以只有在等待之前添加到请求中的命令才会被使用。

由于 SettingsPaneCommandsRequestedEventArgs 不提供延迟,因此无法告诉请求者等待内部异步调用完成。

另请注意,SettingsPane 已弃用,不推荐用于 Windows 10 的新应用程序开发。