Sto lavorando a un'applicazione C# che consente di visualizzare immagini in diretta da una videocamera. Il problema che sto affrontando con il seguente frammento di codice è che, ottengo AccessViolationException in Marshal.Copy quando si esegue questa funzione eseguita continuamente in un thread. Ma, questo funziona con successo una volta eseguito (ottengo una singola immagine statica). Immagino che abbia a che fare con qualche problema di corruzione della memoria. Qualche idea/suggerimenti su come affrontare questo problema?Il metodo Marshal.Copy genera AccessViolationException in C# .NET
private Image ByteArrayToImage(byte[] myByteArray)
{
if (myByteArray != null)
{
MemoryStream ms = new MemoryStream(myByteArray);
int Height = 504;
int Width = 664;
Bitmap bmp = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
Marshal.Copy(myByteArray, 0, bmpData.Scan0, myByteArray.Length);
bmp.UnlockBits(bmpData);
return bmp;
}
return null;
}
Non sono sicuro, ma si potrebbe provare a mettere un lucchetto intorno 'LockBits' e 'UnLockBits'. Poiché questa istruzione blocca la bitmap sulla memoria di sistema. E l'eccezione dice l'accesso non valido alla memoria protetta. – Savaratkar