Behalten Sie den Dateizugriff bei, wenn Sie PictureBox-Bilder ändern
In Desktop-Anwendungen kann das Ändern des Bildes einer PictureBox mit dem neuen Bitmap()-Konstruktor zu einem Dateizugriffsfehler führen, wenn die ursprüngliche Bilddatei bereits verwendet wird. Dieses Problem tritt auf, wenn die PictureBox einen Verweis auf die ursprüngliche Datei beibehält und so den Zugriff auf die Datei verhindert, wenn ein neues Bild geladen wird.
Um dieses Problem zu lösen, besteht eine speicherfreundliche Möglichkeit darin, das Bild mit File.ReadAllBytes() in einen MemoryStream zu laden und dann mit Image.FromStream() ein neues Bild zu erstellen. Auf diese Weise wird die Originaldatei entsperrt, während Sie das neue Bild in der PictureBox ohne Dateizugriffsverletzungen anzeigen können.
Das Folgende ist ein modifiziertes Codebeispiel:
<code class="language-c#">public static Image FromFile(string path) { byte[] bytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(bytes)) { Image img = Image.FromStream(ms); return img; } } pbAvatar.Image = FromFile(filePath);</code>
Diese Methode löst nicht nur das Dateizugriffsproblem, sondern verbessert auch die Leistung. Tests haben gezeigt, dass das Laden von Bildern mit dieser Technik etwa 0,26 Millisekunden pro Bild dauert, während das Kopieren aus einer Bitmap etwa 0,50 Millisekunden pro Bild dauert. Der geringere Speicherbedarf von Byte-Arrays und die Erstellung eines einzelnen Images tragen zur Effizienz bei.
Bitte beachten Sie, dass Sie (Bitmap)Image.FromStream(ms) verwenden können, um das zurückgegebene Bild zu konvertieren, wenn das generierte Bild ein Bitmap-Objekt sein muss. Um die korrekte Freigabe von Ressourcen sicherzustellen, verwenden wir die using
-Anweisung zur Verwaltung von MemoryStream
.
Das obige ist der detaillierte Inhalt vonWie kann ich Dateizugriffsfehler beim Aktualisieren von PictureBox-Bildern verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!