ОБНОВЛЕНИЕ: найден похожий вопрос: 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 нет подписчиков?