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 的新应用程序开发。
在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 的新应用程序开发。