В C ++ / CX у меня было:
IAsyncOperation<ContentDialogResult> Dialog::show() {
return dialog_.ShowAsync();
}
Если я создаю и пытаюсь показать два диалоговых окна, и в результате show () вызывается дважды, ShowAsync генерирует исключение:
Только один ContentDialog может быть открыт в любое время
который я использовал, чтобы поймать и обработать это дело. Когда я конвертирую этот код в C ++ / WinRT, исходя из моего понимания правил преобразования, я имею:
IAsyncOperation<ContentDialogResult> Dialog::show() {
co_return co_await dialog_.ShowAsync();
}
Звонящий выглядит так:
void Dialog::caller(){
.....
try {
show();
} catch (winrt::hresult_error err) {
handle.....
return;
}
......
......
}
Я вижу, что генерируется исключение Windows, но каким-то образом оно не улавливается моим кодом.
Это правильный способ вызова ShowAsync ()? И как я могу справиться с этим исключением?
co_await show();
Исключение возникает из-за результата операции, который вы получаете, ожидая его. - person Raymond Chen   schedule 05.09.2020