Заставить закрыть поток - PullRequest
4 голосов
/ 10 июня 2011

Время от времени у меня возникают проблемы, в моей программе есть несколько StreamReader с и StreamWriter с, которые читают информацию и записывают ее.Они работают примерно в 99% случаев, но время от времени я получаю StreamWriter, который не закрывается, на фрагменте кода, который я запускал несколько раз.произойдет, если я спамю функцию, но я пытаюсь найти безопасный способ гарантировать удаление пара.Кто-нибудь знает как?

Ответы [ 3 ]

3 голосов
/ 10 июня 2011

попробуйте using оператор MSDN

using (StreamWriter stream = new StreamWriter(Initialization)){

   //your code

}

это может быть полезно:

Закрытие Stream Read и Stream Writer при выходе из формы

Также вы можете использовать Try Блок

try
{
    //Declare your streamwriter
    StreamWriter sw = new StreamWriter(Initialization);
}
catch
{
    //Handle the errors
}
finally
{
    sw.Dispose();
}
1 голос
/ 10 июня 2011

Если область действия потока локальная, всегда используйте следующую конструкцию:

using (var stream = new Stream())
{
    ...do stream work here...
}

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

0 голосов
/ 10 июня 2011

Оборачивая StreamWriter в оператор использования, я обычно гарантирую, что он удаляется.

using (var writer = new StreamWriter(@"C:\AFile.txt"))
{
    //do some stuff with writer
}

Альтернативой может быть использование блока finally.

...