Предварительно созданный поток и блок «с помощью» - PullRequest
1 голос
/ 08 марта 2012

Я действительно раздражен, когда блок "using" изменяет мой предварительно созданный объект. У меня есть этот кусок кода

class Asset {
    public Stream FileStream { get; set; }

    public Asset(string fileName) {
        FileStream = ...open a file stream...;
    }
}

// Somewhere else
Asset asset = new Asset("file.txt");
using (var reader = new StreamReader(asset.FileStream)) {
    //blah blah blah
}

// Somewhere else else
using (var reader2 = new StreamReader(asset.FileStream))

=> выдает это исключение:

System.ArgumentException: поток не читался.

Пошаговая отладка в Visual Studio помогла мне узнать, что asset.FileStream был удален после первого блока «using».

Пожалуйста, помогите мне спасти его жизнь: (( Как я могу создать поток клонов из потока?

1 Ответ

2 голосов
/ 08 марта 2012

Я согласен, что тот факт, что читатели закрывают основной поток, глуп.Подход, описанный в этой статье , заключается в создании класса декоратора, который упаковывает Stream и имеет запрет на использование методов Close и Dispose.Это, вероятно, не стоит накладных расходов, поэтому вы должны просто не использовать using для этих читателей.

...