ОБНОВЛЕНИЕ: найден аналогичный вопрос: Rx - отписка от событий
Учитывая код:
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, и он не предоставляет метод «сделать снимок», а только генерирует события с растровыми изображениями. Поэтому я использую Reactive Extensions, чтобы принять первое событие и отписаться. Мои сомнения касаются строки "observable.First()".
Правильно ли я понимаю, что после вызова observable.First() моя наблюдаемая отсоединяется от m_capturer (производителя событий)? Если нет, то как мне убедиться, что на m_capturer.Captured нет подписчиков?