Как я могу реализовать OnEndOfStream при чтении IWaveSource - PullRequest
0 голосов
/ 15 октября 2018

В январе прошлого года Филое добавил OnEndOfStream к FluentExtensions.cs, чтобы обнаружить конец потока в источнике волн или источнике сэмплов.Я хотел бы использовать эту опцию.

Ранее можно было перехватить «read == 0» в SingleBlockNotificationStream, а в Win7 это работало нормально.Теперь, когда я перехожу на Win10, это больше не работает, даже в программе, скомпилированной на W7.read==0 происходит много раз при чтении потока.

Мой источник был следующим:

        //the SingleBlockNotificationStream is used to intercept the played samples
        var notificationSource = new SingleBlockNotificationStream(source);
        notificationSource.SingleBlockStreamFinished += (s, a) => EndOfStream = true;

, где я добавил SingleBlockStreamFinished к классу SingleBlockNotificationStream.

Решение Фило выглядит следующим образом:

    /// <summary>
    ///     Registers an <paramref name="action"/> to be executed on end of stream of the <paramref name="sampleSource"/>.
    /// </summary>
    /// <param name="sampleSource">The <see cref="ISampleSource"/> to be tracked.</param>
    /// <param name="action">The callback action with the <paramref name="sampleSource"/> as parameter.</param>
    /// <returns>A wrapper around the <paramref name="sampleSource"/>.</returns>
    public static ISampleSource OnEndOfStream(this ISampleSource sampleSource, Action<ISampleSource> action)
    {
        return new EofTrackingSampleSource(sampleSource, action);
    }

Нет примера его использования, поэтому я застрял, и вместо того, чтобы часами пытаться угадать, что нужно: кто может написать мне те 2 или 3 утверждения, которые необходимы для установки моей переменной EndOfStream в trueна конце потока?Возможно, я использовал Callbacks, но сам никогда не писал

...