エラーが発生したときに2つのボタンを使用して警告ダイアログを表示したいとします。私の知る限り が、これはインタラクションプロパティを使用して、それを行う方法です:ReactiveUI - インタラクションハンドラでスケジューラを使用する
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は、メインスレッドで呼び出される必要があります。私は以下を試しました:
コンソールにログメッセージが表示されますが、ダイアログが表示されず、ReactiveUI.dll内でアプリケーションがクラッシュします。 私は何が間違っていますか?
あなたのように、私は非同期を表現するためにRx構文も好きですが、私はUnit observable trickが欠けていました。それでも決してありません。 Do文の後に.Select(_ => Unit.Default)を追加するか、アクションのオーバーロードを引き続き使用する必要があります。 それでもクラッシュしますが、例外があります。「無効なウィンドウハンドルです。このAPIは、CoreWindowを持つスレッドから呼び出されるか、ウィンドウが明示的に設定されている必要があります。に –