Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена. Ошибка потока памяти

#vb.net

#vb.net

Вопрос:

Я получаю эту ошибку, когда конвертирую изображение в байты с помощью MemoryStream. Сначала все работало нормально, но в третий и четвертый раз я получаю эту ошибку.

 Public Function getImgByte() As Byte()    'Convert image to array bytes
    Dim arrImg() As Byte
    ms2 = New MemoryStream()
    editStudentPicbox.Image.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg) ' Use appropriate format here
    arrImg = ms2.ToArray()
    ms2.Close()
    Return arrImg
End Function
  

Ответ №1:

Проблема в том, что поток памяти закрыт, но он не удален из памяти. Рекомендуется использовать предложение Using . Попробуйте следующий код:

 Public Function getImgByte() As Byte()    'Convert image to array bytes
    Using  ms2 as New MemoryStream()
        editStudentPicbox.Image.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg) ' Use appropriate format here
        Return ms2.ToArray()
    End Using   
End Function
  

Или просто добавьте ms2.Dispose() после ms2.Close(), но вы должны каждый раз объявлять ms2 в этой функции.

 Dim ms2 as MemoryStream = New MemoryStream()
  

Комментарии:

1. не могу попробовать atm, есть другая причина этой ошибки? в первый раз все работало нормально, но со 2-й или 4-й попытки эта ошибка повторяется

2. Просто попробуйте добавить ms2.Dispose() перед возвратом значения