2012-03-08 2 views
1

Меня действительно раздражает, когда «использование» блока подделало мой предварительно созданный объект. У меня есть этот кусок кодаСозданный поток и блок «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 был удален после первого «использования» блока.

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

+2

Я думаю, что просто ответ - не располагайте поток до того, как вы пройдете с ним ... когда вы используете блок-блок, это будет Di поместите Reader и, в свою очередь, удалите поток. –

ответ

2

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

+0

Или, если два блока использования находятся в одном методе, вы можете перенести второй внутри первого. – phoog

Смежные вопросы