Я хочу отображать диалоговое окно предупреждения с двумя кнопками при возникновении ошибки. Насколько мне известно, вот как это сделать, используя свойство Interaction:
this.ViewModel.ConnectionError.RegisterHandler(interaction =>
{
var retry = await this.DisplayAlert("Connection failed", "Do you want to retry?", "RETRY", "ABORT");
if (retry)
interaction.SetOutput(DevicesViewModel.ErrorRecoveryOption.Retry);
else
interaction.SetOutput(DevicesViewModel.ErrorRecoveryOption.Abort);
});
Проблема в том, что исключение генерируется внутри потока в сторонней библиотеке. DisplayAlert должен вызываться в основном потоке. Я пробовал следующее:
this.ViewModel.ConnectionError.RegisterHandler(interaction =>
{
RxApp.MainThreadScheduler.ScheduleAsync(interaction, async (scheduler, i, cancelationToken) =>
{
this.Log().Debug("ScheduleAsync");
var retry = await this.DisplayAlert("Connection failed", "Do you want to retry?", "RETRY", "ABORT");
if (retry)
i.SetOutput(DevicesViewModel.ErrorRecoveryOption.Retry);
else
i.SetOutput(DevicesViewModel.ErrorRecoveryOption.Abort);
return Disposable.Empty;
});
});
Я вижу сообщение журнала в консоли, но диалоговое окно не отображается, и приложение аварийно завершает работу внутри ReactiveUI.dll. Что я делаю неправильно?