问题标签 [system.reactive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
41049 浏览

c# - 反应式扩展使用的好例子

我了解 Rx 的基础知识。我苦苦挣扎的地方是你如何在学术例子之外实际使用它?在哪些常见的、简单的现实世界场景中,Rx 是比我们今天在 .NET 中的解决方案更好的解决方案?

0 投票
1 回答
446 浏览

.net - 构建此 Linq-to-Events 拖放代码的最佳方式是什么?

我正在尝试处理拖放交互,其中涉及鼠标向下、鼠标移动和鼠标向上。

这是我的解决方案的简化复制:

  • 在鼠标按下时,创建一个椭圆并将其添加到画布
  • 在鼠标移动时,重新定位椭圆以跟随鼠标
  • 在鼠标向上时,更改画布的颜色,以便您拖动哪个画布一目了然。

    /li>

XAML 很简单

这段代码有一些我不喜欢的地方,我需要帮助来重构它:)

首先:mousedown 和 mouseup 回调被指定为副作用。如果对 进行两次订阅q,它们将发生两次。

其次,mouseup 回调是在mousemove 回调之前指定的。这使得它有点难以阅读。

第三,对椭圆的引用似乎在一个愚蠢的地方。如果有两个订阅,该变量引用将很快被覆盖。我确信应该有某种方法可以利用let关键字向 linq 表达式引入一个变量,这意味着鼠标移动和鼠标向上处理程序都可以使用正确的椭圆引用

你会怎么写这段代码?

0 投票
1 回答
1311 浏览

c# - Rx:拼凑多个 IObservable Web 请求

我正在使用 IObservables 和响应式扩展创建多个异步 Web 请求。

因此,这为“GET”网络请求创建了 observable:

我能做到

使用 IObservables 和 LINQ 执行多个异步 Web 请求的正确方法是什么,这些请求必须等到其他请求完成?

例如,首先我想验证用户信息:创建 userInfoObservable,然后如果用户信息正确,我想更新统计信息,所以我得到 updateStatusObservable,然后如果状态更新,我想创建friendshipObservable 等等。

还有一个额外的问题,有一种情况我想同时执行网络调用,当所有调用都完成后执行另一个可观察的,直到其他调用完成。

谢谢你。

0 投票
2 回答
1195 浏览

c# - 如何将 PropertyChanged 事件从订阅分派到基于 Interval 的 IObservable

当我尝试从对通过 Observable.Interval() 创建的 IObservable 集合的订阅中引发 PropertyChanged 事件时,我收到“UnauthorizedAccesExpection - 无效的跨线程访问”异常。

凭借我有限的线程知识,我假设间隔发生在其他线程上,而事件想要在 UI 线程上发生???对问题的解释将非常有用。

代码看起来有点像:

有什么解决办法吗?

编辑:

此代码是从 ViewModel 而不是 DependencyObject 执行的。

0 投票
1 回答
562 浏览

c# - IHttpAsyncHandler 和 IObservable 网络请求

在异步处理程序中,我从 webrequest 创建一个 IObservable,它返回一个重定向字符串。

我订阅了那个 observable 并调用了 AsyncResult.CompleteCall() 但我不得不使用 Thread.Sleep(100) 来执行它。而且不是每次都有效。我很确定这是不正确的。你能不能给点光。谢谢!

0 投票
1 回答
1858 浏览

c# - System.Concurrency.AsyncLock 有什么作用?

System.Reactive.dll 将类 AsyncLock 添加到 System.Concurrency。它有一个单一的实例方法,等待,它接受一个动作。

我找到的文档页面只是告诉它预发布文档,所以我在这里问:这个类是做什么的?

0 投票
5 回答
5100 浏览

mono - 响应式框架 (RX) 是否可以在 Mono 中使用?

一直在搜索,但我发现的唯一东西是http://evain.net/blog/articles/2009/07/30/rebasing-system-reactive-to-the-net-clr我开始工作了,但感觉就像应该有一个更简单的方法,特别是因为 rx 是在 09 年中期首次发布。

0 投票
4 回答
4063 浏览

.net - 反应式扩展与 FileSystemWatcher

FileSystemWatcher 长期以来一直困扰着我的一件事是它为文件的单个逻辑更改触发多个事件的方式。我知道它为什么会发生,但我不想关心 - 我只想重新解析文件一次,而不是连续 4-6 次。理想情况下,只有在给定文件完成更改时才会触发一个事件,而不是沿途的每一步。

多年来,我为这个问题提出了各种不同程度的丑陋解决方案。我认为 Reactive Extensions 将是最终的解决方案,但有些事情我做得不对,我希望有人能指出我的错误。

我有一个扩展方法:

最终,我想在给定的时间段内为每个文件名获取一个事件 - 这样一来,具有单个文件名的连续四个事件减少为一个事件,但如果同时修改多个文件,我不会丢失任何内容时间。BufferWithTime听起来像是理想的解决方案。

当我订阅这个 observable 时,对受监视文件的一次更改会连续四次触发我的订阅方法,这完全违背了目的。如果我删除该Distinct()调用,我会看到四个调用中的每一个都包含两个相同的事件 - 因此正在进行一些缓冲。增加传递给的 TimeSpanBufferWithTime似乎没有任何效果 - 我高达 20 秒,但行为没有任何变化。

这是我第一次涉足 Rx,所以我可能遗漏了一些明显的东西。我做错了吗?有更好的方法吗?感谢您的任何建议...

0 投票
1 回答
989 浏览

c# - 如何等待在silverlight测试中触发事件

我有一个 ViewModel,它开始在构造函数中异步加载模型,并在加载模型时触发一个事件。我得到了一个使用 silverlight 单元测试框架的测试,如下所示:

但我开始使用 Rx 框架,并试图让我的测试工作,但到目前为止我还没有运气。这是 2 次尝试:

第一个测试永远等待,第二个测试不起作用,因为 viewModel 在执行 FromEvent 时为空。

任何人都知道如何正确执行此操作?

更新:在 PL 的帮助下,这是一个可行的解决方案:

0 投票
1 回答
2392 浏览

c# - 使用 Reactive Extensions 创建可观察的鼠标拖动

我有以下

当我订阅它时,它将给我拖动的起点和当前的终点。现在,一旦拖动完成,我需要做一些事情。我试图用 RX 完全做到这一点并没有成功,最后我做了

这工作正常,直到我进行鼠标右键拖动。然后当我单击鼠标左键时,我得到消息框。如果我只拖动左键,我会得到消息框,然后单击鼠标左键不会产生该框。我想在没有外部状态的情况下这样做,但如果没有别的,我至少希望它能够正常工作。

仅供参考:我尝试使拖动变得易变并使用锁,但这没有用。

编辑

事实证明我的问题是右键单击上下文菜单。一旦我摆脱了上面的代码就可以了。所以,现在我的问题是如何获得上下文菜单并仍然让我的代码工作。我假设上下文菜单正在处理鼠标左键单击,并且不知何故导致我的代码无法正常工作,但我仍然对此感到困惑。