加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为此提供RX简单示例帮助

发布时间:2020-12-15 19:37:24 所属栏目:百科 来源:网络整理
导读:我为此搜索了一个示例,但找不到清楚解释如何使用RX进行设置的内容: 我有这个要求…… 在WPF应用程序中,我有一个列表框 调度程序计时器例程每隔2秒向本地列表添加一些随机数 现在我想设置一个observable / observer来观察这个List int因为它不断积累,并将最
我为此搜索了一个示例,但找不到清楚解释如何使用RX进行设置的内容:
我有这个要求……

>在WPF应用程序中,我有一个列表框
>调度程序计时器例程每隔2秒向本地列表添加一些随机数
>现在我想设置一个observable / observer来观察这个List< int>因为它不断积累,并将最新添加的数字添加到列表框的项目集合中.

听起来非常简单,我已经在后台线程中完成了第三位(没有RX,但在列表< int>上有标准查找)并且很容易添加到列表框中.
当没有背景工作者等尝试做同样的事情并且只使用RX时,我被卡住了.

为可能的愚蠢问题道歉(对于那里的RX专家),但请帮助我们如何使用RX完成此WPF.

谢谢.

解决方法

使用Rx时,您需要牢记IEnumerable< T>之间的对偶性. &安培;的IObservable< T> (以及IEnumerator< T>& IObserver< T>).

您应该始终寻找实现IEnumerable< T>的对象.并考虑如何用IObservable替换它们< T>.

在你的问题中,你说你有一个计时器将一些数字添加到List< int>您要观察并将新数字添加到列表框中.所以我会考虑用IObservable< int>替换列表.这里的技巧不是关于观察列表(或ObservableCollection< int>)而是关于使用Rx作为代码的核心部分.

所以,这是一个简单的例子.

从问题中描述的核心元素开始:

var dispatchTimer = new DispatcherTimer();
var random = new Random();
var listBox = new ListBox();

从dispatchTimer创建一个observable:

IObservable<IEvent<EventArgs>> ticks =
    Observable.FromEvent(
        h => dispatchTimer.Tick += h,h => dispatchTimer.Tick -= h);

查询observable以创建一个新的随机数可观察量:

IObservable<int> randomNumbers =
    from tick in ticks
    select random.Next(1,11);

现在,订阅可观察的随机数以更新列表框:

_updateListBoxSubscription =
    randomNumbers.ObserveOnDispatcher().Subscribe(n => listBox.Items.Add(n));

.ObserveOnDispatcher()调用将确保将数字添加到UI线程上的列表框中.

您需要定义一个字段或属性来保存对订阅的引用,以便不会收集垃圾.这正是添加处理程序时事件处理程序字段所执行的操作,但是对于Rx,您必须明确地执行此操作.

private IDisposable _updateListBoxSubscription;

你去了 – 你现在有一个列表框,从按时间指定的时间间隔生成的随机数更新.

就这么简单.我希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读