gpt4 book ai didi

c# - 如何从不从 EventHandler 继承的委托(delegate)创建 IObservable?

转载 作者:行者123 更新时间:2023-11-30 21:40:42 25 4
gpt4 key购买 nike

我正在使用 Accord(以前称为 AForge)从网络摄像头捕捉图像帧。

这些图像通过 VideoCaptureDevice.NewFrame 事件到达:

public delegate void NewFrameEventHandler(object sender, NewFrameEventArgs eventArgs);

public class NewFrameEventArgs : EventArgs
{
public Bitmap Frame { get; }

public NewFrameEventArgs(Bitmap frame);
}

问题是,我尝试使用 Observable.FromEvent,但在许多可能的重载中迷失了方向:

void Run()
{
var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);

// regular way
videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);

// intended rx way
var receivedFrames = Observable.FromEvent(????) /////////// How?
}

void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// do something
}

我知道我不能使用 Observable.FromEventPattern,但不知道该用什么,更不知道如何使用。

最佳答案

尝试以下操作:

var receivedFrames = Observable.FromEventPattern<NewFrameEventHandler, NewFrameEventArgs>(
handler => handler.Invoke,
h => videoSource.NewFrame += h,
h => videoSource.NewFrame -= h);

当我第一次学习 Rx 时,我发现以下站点非常有用:IntroToRx (链接转到我找到此示例的部分)。

关于c# - 如何从不从 EventHandler 继承的委托(delegate)创建 IObservable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44372089/

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