Ich hatte bereits ein Bild im PictureBox-Steuerelement, und jetzt möchte ich ein neues hinzufügen.
Was passiert, ist, dass allpication disposes (und ich fange eine Ausnahme: "Parameter ist nicht gültig").
Das ist mein Code:
%Vor%Wenn also der Code aus der Methode entfernt wird, geht es streight, um dieses und das Hauptformular zu streichen. Ich erhalte die Ausnahme nur in der Zeile, wo Form1 gestartet wurde. Auf diesem gibt es keine Ausnahmen was auch immer. Es muss etwas falsch sein, während pictureBox malt (im Paint-Ereignis), aber ich bin nicht daran interessiert.
Ich habe wirklich keine Ahnung mehr, wie ich dieses Problem beheben kann. Ich habe sogar versucht, alle Ressourcen zu löschen (durch Aufrufen der Garbage Collection), aber nichts scheint zu funktionieren.
Noch eine Sache: "part" ist eine Referenz der Liste. Wenn ich versuche, das aktuelle Bild zu löschen (um es durch ein neues zu ersetzen), habe ich eine weitere Ausnahme, wie:
"Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird."
Hat das etwas mit der ersten Ausnahme zu tun (wenn ein neues Bild nicht in PictureBox gezeichnet wird)?
Wie bereits erwähnt, wird das Bild, das Sie von open.filename ziehen, entfernt, sobald Sie die using () -Anweisung verlassen. Ihre Picture-Box verweist immer noch auf dieses Bild im Speicher. Wenn Sie es also entfernen, verlieren Sie auch, was in Ihrer Picture-Box gespeichert wurde.
Was Sie wirklich brauchen, ist eine einzigartige Kopie des Bildes, das Sie ziehen.
%Vor%Auf diese Weise wird Ihre Datei entsperrt, sobald Sie diesen Block verlassen, und Sie behalten eine eindeutige Kopie Ihres Bildes in der Bildbox.
Das Problem ist, dass pictureBox1.Image
nach der Ausführung dieses Codes auf ein Image
verweist, das entsorgt wurde.
Wenn Sie die Image
-Erstellung nicht in using
einfügen, sollte Ihr Problem behoben sein.
Sie könnten auch etwas wie die folgende erstellen, eine Methode, die die Bilder lädt und dann an die Bildsteuerung zurückgibt, zum Beispiel das ist, was ich verwende, wenn ich eine Bild-Strg
füllen möchteIch habe ein Windows-Formular mit 3 verschiedenen Bildern, die ich laden möchte, aber ich zeige nur den Code für One, da ich die gleiche Methode für alle 3 Bildkontrollen
aufrufen %Vor%Ja, das funktioniert jetzt, aber seltsam, ich würde fast schwören, dass ich es auch so versucht habe. Ok, egal, nur dass es funktioniert. Was mich beunruhigt, ist auch etwas anderes, das meiner Meinung nach dasselbe ist wie dein Code, aber es funktioniert nicht, es versucht wieder, die Anwendung zu disponentieren (mit derselben Ausnahme). Dies ist ein Beispielcode:
%Vor%Jetzt übergebe ich ein aktuelles Bild in eine generische Liste und versuche, imageBox daraus ein neues Bild zuzuweisen, aber, wie bereits gesagt, wird eine Ausnahme ausgelöst (und die Anwendung wird beendet). Warum?