代码之家  ›  专栏  ›  技术社区  ›  Shrike

当用observate.FromEvent创建的observate将与事件生成器分离时?

  •  1
  • Shrike  · 技术社区  · 14 年前

    更新:发现类似问题: Rx - unsubscribing from events

    interface IBitmapCapturer {
        event EventHandler<EventArgs<RawBitmap>> Captured;
        void Start();
        void Stop();
    }
    
    public class Camera {
        IBitmapCapturer m_capturer;
    
        public RawBitmap CaptureBitmap() {
            IObservable<IEvent<EventArgs<RawBitmap>>> observable = Observable.FromEvent<EventArgs<RawBitmap>>(
                handler => m_capturer.Captured += handler,
                handler => m_capturer.Captured -= handler);
            m_capturer.Start();
            IEvent<EventArgs<RawBitmap>> evn = observable.First();
            m_capturer.Stop();
            return evn.EventArgs.EventData;
        }
    }
    

    我在这里要做的是从摄像机上拍摄一张照片,但这是唯一的第一张。IBitmapCapturer是一些与DirectShow相关的东西,不提供“拍摄”的方法,只生成带有位图的事件。所以我使用反应式扩展来获取第一个事件并取消订阅。 我怀疑的是“observate.First()”行。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Richard Szalay    14 年前

    框架确保 IDisposable Subscribe 在序列完成或出错时被释放,并且 返回者 FromEvent 取消订阅事件。

    First Take(1) ,在接收到第一个值后(或在源为空时引发异常后),将释放源序列。

    简而言之,您可以确保在调用 完成。