2017-09-22 27 views
0

好了,所以基本上我想加載圖像(檢查),用它(支票),卸載它(半檢查),然後再加載(失敗)...C# - Monogame - 計劃仍然使用圖像設置它後空

因此,這裏是我做過什麼:

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

它加載textuure,做工精細,我可以得出它沒有問題,那就當我不想使用它,我將它設置爲空

this.TileTexture = null; 

它工作正常,圖像消失,,我能夠再次從任何地方載入我的計算機上的一些其他圖像(然後該圖像將被放入該的Texture2D變量,其中前一個是),但是當我想要加載,我再次使用過的圖像,即使現在另一個圖像存儲在該Texture2D變量中,我得到一個異常:

程序無法訪問該文件,因爲它正在被另一個進程使用。(這將是我的程序)。

如何完全地,然後使用這個形象,所以我可以在同一個運行時再次存取權限,如果可能我會需要停止我的Monogame計劃?相反

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

,將其放置在一個變種,然後調用.Close方法

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

*我怎麼那麼完全地使用此圖片停止我的Monogame程序,所以我可以存取權限再次*:關閉流,當你用它做 –

+0

謝謝,運作良好; d –

回答

1

您需要關閉您的流時:

0

你對你的方法調用調用一個新的蒸汽你已經完成了。取而代之的是:

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

嘗試:

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

using會照顧關閉和處置的流

+0

是關閉();足夠還是我還需要Dispoe(); ? –

+0

基本上關閉()在這種情況下調用的Dispose。但是「最佳實踐」是像Matt的答案一樣使用「使用」方法 –

相關問題