Tag: system.reactive

使用比原始元素更多的元素创建ReactiveUI派生集合

是否可以创建一个ReactiveUI派生集合,其中包含的元素多于原始集合? 我已经看到有一种过滤集合和选择单个属性的方法,但我正在寻找的是相当于枚举的SelectMany操作。 为了说明这一点,想象一下,试图得到一个派生的集合来代表每个遇到堵车的乘客。 class Car { ReactiveCollection Passengers; } var TrafficJam=new ReactiveCollection(); EveryPassengerInTheTrafficJam=Cars.CreateDerivedCollection(c=>c.Passengers); 以上不起作用,我认为错误是IEnumerable<ReactiveCollection>无法强制转换为ReactiveCollection – 或者任何类型的东西,无论如何。 我无法弄清楚这种扁平化的正确方法 – 诚然,我可能在这里完全错误地吠叫,所以如果有更好的方法来实现同样的事情,请告诉我!

创建对IObservable的弱订阅

我想要做的是确保如果对我的观察者的唯一引用是可观察的,它会被垃圾收集并停止接收消息。 假设我有一个带有列表框的控件,名为Messages,后面是这个代码: //Short lived display of messages (only while the user’s viewing incoming messages) public partial class MessageDisplay : UserControl { public MessageDisplay() { InitializeComponent(); MySource.IncomingMessages.Subscribe(m => Messages.Items.Add(m)); } } 哪个连接到此来源: //Long lived location for message store static class MySource { public readonly static IObservable IncomingMessages = new ReplaySubject; } 我不想要的是让消息显示器在不再可见后很长时间内保存在内存中。 理想情况下,我想要一点延伸,所以我可以写: MySource.IncomingMessages.ToWeakObservable().Subscribe(m => Messages.Items.Add(m)); […]

一个代码示例说明了async / await和Reactive(Rx)扩展的范例之间的区别?

两个系统。 .NET的react native扩展和新的C#5.0(.NET 4.5) async/await追求(或基于) future和promises构造范式(方法)。 你能给出(*)最简单的C#代码示例来说明它们之间的区别吗? (*) 没有I / O,互联网或数据库连接是否可能? 更新: 好吧,如果以前似乎回答了这个问题,让我重新制定一下。 为什么在使用本机.NET Iobservable / IObserver + await / async时会添加并开始使用.NET的Reactive(Rx)扩展? 有什么可能的例子说明Rx会在没有Rx的情况下做出同样更笨拙或效率更低的东西(即只使用原生的.NET Iobservable / IObserver + await / async方法)?

Rx的真实世界示例

可能重复: react native扩展使用的好例子 我一直在玩Reactive Extension一段时间,但主要限于处理/编写WPF前端内的用户驱动事件。 它是一种非常强大,新的异步编程方式,我很好奇其他人正在做什么,你认为它可以改善我们目前做事的方式?

安装Reactive Extensions后使用Newtonsoft Json和动态时的RuntimeBinderException

我使用以下代码: public async Task LoginAsync(string username, string password) { //removed irrelevant code from snippet var response = await JSonConvert.DeSerializeObjectAsync(responseText); return (response.success == SUCCESS ? response.data.sid : String.Empty); } 在我通过NuGet安装Reactive Extensions之前,这一点很有用。 从该方法的最后一行开始,只需抛出一个RuntimeBinderException : {“’Newtonsoft.Json.Linq.JObject’不包含’成功’的定义”} 现在让它运行的唯一方法是使用它: return (response[“success”].ToString() == SUCCESS ? response[“data”][“sid”].ToString() : String.Empty); 我尝试了另一个JSon库(JsonFX2.0),但我也得到了一个RuntimeBinderException: {“’ExpandoObject’不包含’成功’的定义”} 服务返回的json看起来像这样: { “data”: { “sid”: “sK7gyGm1kfEUc” }, “success”: true } 我已经尝试删除Reactive […]

缓存数据库游标中的数据,同时保持UI响应

我有一个填充的数据库目录,以及一个可用于检索对象的游标。 这个目录显然可能非常大,我想做的是使用ReactiveUI缓冲数据,同时保持UI数据绑定和响应。 我按照这里的步骤将我的IEnumerable转换为IObservable ,如下所示: public class CatalogService { … public IObservable DataSource { get { return Observable.Create(obs => { var cursor = Database.Instance.GetAllObjects(); var status = cursor.MoveToFirst(); while (status == DbStatus.OK) { var dbObject= Db.Create(cursor); obs.OnNext(dbObject); status = cursor.MoveToNext(); } obs.OnCompleted(); return Disposable.Empty; }); } } } 在我的视图类(特别是Loaded事件)中,我订阅数据源并使用缓冲区方法,希望保持UI响应。 public ObservableCollection DbObjects { get; set; } […]

Rx如何将命令与另一个observable组合

我有一些反应命令以及一些观察者持有一些信息,我正在尝试做类似的事情: _navigate = ReactiveCommand.Create(CanNavigate); _navigate.CombineLatest(navigationTarget, (_, tgt) => tgt) .Subscribe(tgt => Navigation.NavigateTo(tgt)); 我尝试了几种不同的方法: SelectMany Zip 我要么最终得到: 订阅在第一次停止后调用(如果我使用Zip) 即使命令在执行一次后仍未执行,订阅也会调用 基本上我想要: 一个observable,每当(并且仅 )执行命令时触发,同时拉入第二个observable的最新值。 不能完全理解如何最好地实现这一目标……

如何在长时间运行的查询中间扩展Throttle Timespan?

是否可以在查询中间扩展Throttle Timespan值? 例如,假设一个例子在101 Rx Samples Throttle中有这个查询var throttled = observable.Throttle(TimeSpan.FromMilliseconds(750)); 。 如果我想要改变它以便如果在前500毫秒期间没有事件,那么对于之后的每个事件,节流值将被扩展到例如1500毫秒。 这是一个使用Switch运算符的地方吗?

如何将IEnumerable <Task >转换为IObservable

是否有内置的方法将IEnumerable <Task >转换为IObservable 。 顺序并不重要,只是我得到的东西,但最好是因为它们已经完成。 如果它还不存在,那么实现它的好方法是什么?

如何清除ReplaySubject上的缓冲区?

如何清除ReplaySubject上的缓冲区? 我需要定期清除缓冲区(在我的情况下作为日常事件的结束)以防止ReplaySubject不断增长并最终占用所有内存。 理想情况下,我希望保持相同的ReplaySubject,因为客户端订阅仍然很好。 谢谢。