我们的应用程序使用Reactive Extensions(Rx).这些通常是通过Microsoft的可下载软件包安装的.但是,当我们发送我们的应用程序时,我们提供了dll的副本(即System.CoreEx.dll和System.Reactive.dll).GAC v1.0.2787.0和v1.0.2856.0中似乎有两个版本.我们引用一个特定的版本并发布适当的版本.
但是,当应用程序启动时,它会抛出一个错误对话框,指出必须在GAC中安装Rx Dll.它还向Dll请求其他版本的Rx,例如,如果您引用1.0.2787,它将请求1.0.2856.0,反之亦然.
有没有人解决这个问题?
是否可以使用Reactive Extensions(Rx)在.NET 3.5中创建执行并行化的应用程序,还是以某种方式限制?我从http://www.microsoft.com/download/en/confirmation.aspx?id=26649下载了Rx ,在创建了一个带引用的反应式程序集的简单项目之后,我找不到与.NET 4.0中的任务相对应的任何类.我正在尝试为"任务"找到课程,但唉,我找不到任何课程.难道我做错了什么?
我有ObservableCollection <T>,我需要创建observable <bool>,如果collection包含任何元素,则返回true
我试着这样做
var collectionHasElementsObservable =
Observable.FromEventPattern<NotifyCollectionChangedEventHandler,NotifyCollectionChangedEventArgs>(
ev => ((ObservableCollection<MyType>)_items).CollectionChanged += ev,
ev => ((ObservableCollection<MyType>)_items).CollectionChanged -= ev);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将其转换为IObservable <bool>
如何从中创建可观察的<bool>?
我正在通过网络浏览Rx框架材料,我找到了很多.
现在每当我谷歌周围的时候,我也发现了"反应式编程"维基百科的链接.
由于反应式编程是关于a:= b + c,(无论何时b或c发生变化,都会发生变化).和Rx是关于订阅源发布的可观察序列.
有人可以解释一下反应式编程和Rx之间的链接究竟是什么?
我正在努力实现我在这里使用Reactive Extensions for Javascript(RX-JS)发布的相同效果.我对如何做到有点困惑.这是页面:
<!DOCTYPE html>
<html>
<head>
<title>drag and drop</title>
</head>
<style type="text/css">
canvas {
border:1px solid steelblue;
background-color: whitesmoke;
}
</style>
<body>
<canvas id="canvas" width=300 height=300></canvas>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(function() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var canvasOffset = $("#canvas").offset();
var offsetX = canvasOffset.left;
var offsetY = canvasOffset.top;
var drawing = false;
var mouseX = 0;
var mouseY = 0;
function handleMouseDown(e) {
mouseX = parseInt(e.clientX - offsetX);
mouseY = parseInt(e.clientY - offsetY); …Run Code Online (Sandbox Code Playgroud) 我在多个线程中接收UDP上的消息.每次接待后我都会加注MessageReceived.OnNext(message).
因为我使用多个线程,所以无序引发的消息是一个问题.
如何通过消息计数器命令加注消息?(假设有一个message.counter属性)
必须记住一条消息可能会在通信中丢失(假设我们在X消息之后有一个计数器孔,那个洞没有填满我提出下一条消息)
必须尽快提出消息(如果收到下一个计数器)
Rx GroupByUntil文档声明
当出现与回收组具有相同键值的新元素时,将使用新的生命周期请求重新生成该组.
我对这段代码有疑问.
myObservable.GroupByUntil(
selectKey,
g => g.Throttle( selectTimer(g.Key),
throttlingScheduler))
Run Code Online (Sandbox Code Playgroud)
selectTimer当组使用相同组密钥的新元素"重生"时,不会调用我的限制计时器.相反,元素灌浆继续使用相同的节流计时器.
当有相同键值的元素出现时,有没有办法刷新节流定时器?
我有以下代码:
IDisposable subscription = myObservable.Throttle(TimeSpan.FromMilliseconds(50), RxApp.MainThreadScheduler)
.Subscribe(_ => UpdateUi());
Run Code Online (Sandbox Code Playgroud)
正如所料,UpdateUi()将始终在主线程上执行.当我将代码更改为
IDisposable subscription = myObservable.Throttle(TimeSpan.FromMilliseconds(50))
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(_ => UpdateUi());
Run Code Online (Sandbox Code Playgroud)
UpdateUI() 将在后台线程中执行.
为什么不Throttle(...).ObserveOn(scheduler)等同Throttle(..., scheduler)?
我试图获得关于Aggregate函数(即Sum)结果的通知,它对无限序列的部分序列进行操作(最顶层,数据源序列永远不会完成).问题可以在这里看到:
var seq = Observable.Interval(TimeSpan.FromMilliseconds(20)).Buffer(10);
seq.Sum(l => l.Sum())
.Subscribe(n =>
s_log.DebugFormat("Got {0}", n));
Run Code Online (Sandbox Code Playgroud)
Lambda l.Sum()按预期调用(计算部分和),但从不打印"Got ..."行,因为永远不会调用subscriber.我怀疑它与某种原始序列的"永无止境"特征有关.有限序列:
Observable.Range(1,100).Buffer(10);
Run Code Online (Sandbox Code Playgroud)
按预期工作.所以问题很简单:如何将无限序列的部分片段"标记"为"完整",因此聚合函数将分别对它们起作用(并将其结果推送给订阅者)?
当我写.Subscribe表达式时,我经常发现Resharper为我选择了以下重载,位于mscorlib,Version = 4.0.0.0:
namespace System
{
public interface IObservable<out T>
{
IDisposable Subscribe(IObserver<T> observer);
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来与大多数重载非常不同,这些重载Action都来自mscorlib,而不是System.Reactive.*我期望大多数Reactive的东西.
这次超载有什么作用?该如何使用?怎么IObserver<T>涉及Action?为什么mscorlib会出现这种单一过载?
system.reactive ×10
c# ×5
.net ×2
reactiveui ×2
.net-3.5 ×1
canvas ×1
html5 ×1
javascript ×1
rxjs ×1
udp ×1