gpt4 book ai didi

c# - react 性扩展 : Wrap custom delegate event

转载 作者:行者123 更新时间:2023-11-30 16:08:37 24 4
gpt4 key购买 nike

如何使用 Observable.FromEvent 将这些自定义委托(delegate)包装在 Rx 中?

public delegate void EmptyDelegate();
public delegate void CustomDelegate( Stream stream, Dictionary<int, object> values );

最佳答案

空委托(delegate)

这是一个无参数的委托(delegate),但是流需要一个类型——Rx 为此目的定义了 Unit,以指示我们只对事件的发生感兴趣的事件类型——也就是说,没有任何意义有效负载。

假设您有一个此委托(delegate)的实例声明为:

public EmptyDelegate emptyDelegate;

然后你可以这样做:

var xs = Observable.FromEvent<EmptyDelegate, Unit>(
h => () => h(Unit.Default),
h => emptyDelegate += h,
h => emptyDelegate -= h);

xs.Subscribe(_ => Console.WriteLine("Invoked"));

emptyDelegate(); // Invoke it

自定义委托(delegate)

假设您同时需要流和值,您将需要一个类型来承载它们,例如:

public class CustomEvent
{
public Stream Stream { get; set; }
public Dictionary<int,object> Values { get; set; }
}

然后假设声明了一个委托(delegate)实例:

public CustomDelegate customDelegate;

你可以这样做:

var xs = Observable.FromEvent<CustomDelegate, CustomEvent>(
h => (s, v) => h(new CustomEvent { Stream = s, Values = v }),
h => customDelegate += h,
h => customDelegate -= h);

xs.Subscribe(_ => Console.WriteLine("Invoked"));

// some data to invoke the delegate with
Stream stream = null;
Dictionary<int,object> values = null;

// and invoke it
customDelegate(stream,values);

有关 Observable.FromEvent 的详细说明,请参阅 How to use Observable.FromEvent instead of FromEventPattern and avoid string literal event names .

关于c# - react 性扩展 : Wrap custom delegate event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28939855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com