2017-09-22 1 views
0

Okay, also im Grunde möchte ich ein Bild laden (überprüfen), verwenden (überprüfen), entladen (semi-check) und dann erneut laden (fail) ...C# - Monogame - Programm verwendet immer noch ein Bild nach der Einstellung auf Null

So, hier ist das, was ich getan habe:

TileTexture = Texture2D.FromStream(GraphicsDevice, new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open)); 

es hat eine textuure zu laden, funktioniert gut, kann ich es kein Problem ziehen, dann, wenn ich es nicht verwenden wollen, stelle ich es zu null

this.TileTexture = null; 

und es funktioniert gut, Bild verschwindet, und ich kann ein anderes Bild von irgendwo auf meinem Computer wieder laden (und dann wird das Bild in die Texture2D-Variable, wo die vorherige war), aber wenn ich das Bild, das ich vorher wieder verwendet, obwohl laden wollte jetzt ist ein anderes Bild in dieser Texture2D-Variable gespeichert, ich bekomme eine Ausnahme:

Das Programm kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird. (Welches wäre mein Programm).

Wie schließe ich dann mein Monogame-Programm vollständig ab, um dieses Bild zu verwenden, damit ich es zur gleichen Laufzeit wieder aufrufen kann, wenn ich es vielleicht tun müsste?

+0

* Wie kann ich dann halt komplett mein monogame Programm unter Verwendung dieses Bildes so kann ich Zugang wieder *: Schließen Sie Ihren Stream, wenn Sie damit fertig sind –

+0

Danke, das hat gut funktioniert, D –

Antwort

1

Sie benötigen Strom zu schließen, wenn Du bist damit fertig. Statt dessen:

TileTexture = Texture2D.FromStream(GraphicsDevice, new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open)); 

Versuchen:

using (var fs = new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open)) 
{ 
    TileTexture = Texture2D.FromStream(GraphicsDevice, fs); 
} 

using wird der Schließung kümmern und Anordnen der Strom

0

Sie einen neuen Dampf auf dem Methodenaufruf Aufruf:

new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open)) 

Stattdessen legen Sie sie in einem var und dann die Methode .Close nennen

var stream = new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open) 
... 
stream.Close(); 
+0

ist Close(); genug oder muss ich auch disploe(); ? –

+0

Grundsätzlich Close() ruft in diesem Fall das Dispose auf. Aber "Best Practice" ist Disposition mit der "Using" -Methode wie Matts Antwort –

Verwandte Themen