Событие, когда данные были записаны в поток? - PullRequest
2 голосов
/ 06 февраля 2012

Я пытаюсь создать программу, которая вызывает действие, как только новые данные были записаны в объект FileStream. Мой текущий подход заключается в следующем:

public class BlockingFileStream : FileStream
{

    public override int Read(byte[] array, int offset, int count)
    {
        while (Position == Length) ;
        return base.Read(array, offset, count);
    }

    public override int ReadByte()
    {
        while (Position == Length) ;
        return base.ReadByte();
    }

}

Как видите, все, что делает этот класс, это ждать, пока длина потока не станет больше его текущей позиции. Кажется, это работает, но мне было интересно, есть ли лучший способ сделать это. Итак, мой вопрос:

Есть ли лучший способ сделать то, что делается в приведенном выше фрагменте кода?

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Возможно, вы захотите взглянуть на FileSystemWatcher , чтобы узнать, будет ли это лучшим решением для вас. Оживленное ожидание обычно не является хорошим решением.

2 голосов
/ 06 февраля 2012

В этом случае, я думаю, вы не должны держать файл в «открытом» состоянии, потому что другая программа не может записать данные в файл.

Попробуйте вместо этого использовать FileSystemWatcher class , чтобы получать уведомления об изменениях файла ( пример ).

...