私は reactui を試していますが、単純なシナリオを機能させる方法がわかりません: チャット ルームでメッセージをリッスンする方法があります。そのため、長時間実行され、メッセージが見つかったときにイベントが発生します。
反応UIを使用して、ウィンドウが開いたときにこの長時間実行されるメソッドを開始し、リストボックスの画面に新しいメッセージを入力したいと考えています。私は rx を使用しているため、長時間実行されるメソッドの IObseravble バージョンが必要になると想定したため、次のようなものを作成しました。
public static IObservable<Message> ObservableStream(int roomid, CancellationToken token)
{
return Observable.Create<Message>(
async (IObserver<Message> observer) =>
{
...
}
);
}
しかし、これをreactiveuiに組み込む方法がわかりません。必要ObservableAsPropertyHelper<List<Message>>
ですか?現時点では、実行時間の長いメソッドを aTask.Factory.Startnew
で開始し、イベントが発生すると、フロント エンドのリスト ボックスにバインドされているメッセージのリストに手動で追加します。これは機能しますが、reactiveuiを使用していません。これを行うにはreactiveuiの方法が必要だと思います:
public class MainWindowViewModel : ReactiveObject
{
private ThreadSafeObservableCollection<Message> _Messages;
public ThreadSafeObservableCollection<Message> Messages
{
get { return _Messages; }
set {
this.RaiseAndSetIfChanged(x => x._Messages, value);
}
}
public MainWindowViewModel()
{
Client.NewMessage += (sender, args) => Messages.Add(args.Message);
var task = Task.Factory.StartNew(() => Client.GetStream(token), token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
}
}
// IN the code-behind
this.OneWayBind(ViewModel, x => x.Messages, x => x.MessageList.ItemsSource);