Résoudre les problèmes de verrouillage de fichiers C# lors du chargement de bitmap
Le message d'erreur « Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus » apparaît généralement lorsqu'un objet Bitmap détient un verrou sur le fichier image après l'initialisation (par exemple, pbAvatar.Image = new Bitmap(filePath)
). Cela empêche les tentatives ultérieures d'accès ou de modification du fichier.
La solution réside dans le déverrouillage de ce verrou. Une méthode très efficace consiste à charger l'image directement à partir d'un flux, en contournant le mécanisme de verrouillage de fichier du constructeur Bitmap :
<code class="language-csharp">public static Image LoadImageFromStream(string path) { byte[] imageBytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image img = Image.FromStream(ms); return img; } }</code>
Cette fonction lit le fichier image dans un tableau d'octets, puis utilise un MemoryStream pour charger l'objet Image, évitant ainsi le verrouillage du fichier. Cette image chargée peut ensuite être attribuée à votre PictureBox (par exemple, pbAvatar.Image = LoadImageFromStream(filePath);
).
Considérations relatives aux performances
Si un objet Bitmap est strictement nécessaire, vous pouvez convertir efficacement l'image chargée :
<code class="language-csharp">return (Bitmap)Image.FromStream(ms);</code>
L'analyse comparative révèle que le chargement directement à partir du tableau d'octets est considérablement plus rapide (environ 0,26 ms par image) que la création d'un Bitmap à partir d'un Bitmap existant (environ 0,50 ms par image). Ce gain de performances vient du fait d'éviter une copie d'image inutile.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!