Невозможно получить доступ к закрытому потоку при передаче потока в другую функцию - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно передать поток нескольким функциям в другом классе, но выдает ошибку

Невозможно получить доступ к закрытому потоку

Вот код:

первый метод:

Здесь он открывает файл с помощью метода File.Open, затем создает объект потока памяти и копирует FileStream в MemoryStream.затем устанавливает Позицию в 0 (я устанавливаю позицию в 0, потому что я был в решении, но не помогал).Затем он создает объект класса DocxConvert и вызывает метод Converto, передавая ему MemoryStream.

    using (var stream = File.Open(tempPath2, FileMode.Open))
    {
        using(var ms = new MemoryStream())
            {
                stream.CopyTo(ms);
                ms.Position = 0;
                using (var docx = new DocxConvert())
                {
                    return docx.Converto(ms);
                }
            }
    }

DocxConvert Class:

Он принимает поток и затем вызывает copyStreamметод путем передачи принятого потока.

метод copyStream в классе DocxConvert: он должен скопировать принятый поток в другой поток с именем _memoryStream, который является свойством класса.

    public class DocxConvert
{  

        private MemoryStream _memoryStream = new MemoryStream();

  public bool Converto(Stream stream)
                {
                    try
                    {
                        copyStream(stream);
                        //more code
                    }
                    catch (IOException ex)
                    {
                        Debug.WriteLine(ex);
                    }

                    return true;
                }


       private void copyStream(Stream stream)
        {
            stream.CopyTo(_memoryStream); //here it throws the error
        }
}

ps Я ищу эту ошибку здесь перед публикацией, но ни одна из тем не помогла мне.

решено перезагрузкой ПК, код это нормально.

1 Ответ

0 голосов
/ 05 октября 2018

Я не знаю о вашем вопросе. Но здесь, в приведенном ниже коде нет исключений

    private void button1_Click(object sender, EventArgs e)
    {
        string tempPath2 = Application.StartupPath + "//" + "test.txt";
        using (var stream = File.Open(tempPath2, FileMode.Open))
        {
            using (var ms = new MemoryStream())
            {
                stream.CopyTo(ms);
                ms.Position = 0;

                var docx = new DocxConvert();
                    var isok = docx.Converto(ms);

            }
        }
    }

Ниже приведен код, определяемый там, где _memorystream определен сверху

    MemoryStream _memoryStream = new MemoryStream();
    public bool Converto(Stream stream)
    {
        try
        {
            copyStream(stream);
            //more code
        }
        catch (IOException ex)
        {
          //  Debug.WriteLine(ex);
        }

        return true;
    }
    private void copyStream(Stream stream)
    {
        try
        {
            stream.CopyTo(_memoryStream); 
        }
        catch (Exception)
        {


        }

    }
...