C#-Monogame-程序在将图像设置为null后仍然使用图像

C#-Monogame-程序在将图像设置为null后仍然使用图像,c#,monogame,C#,Monogame,好的,所以基本上我想加载一个图像(检查),使用它(检查),卸载它(半检查),然后再次加载它(失败) 以下是我所做的: TileTexture = Texture2D.FromStream(GraphicsDevice, new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open)); 它加载一个文本,工作正常,我可以画它没有问题,然后当我不想使用它时,我将它设置为null this.TileTexture = null;

好的,所以基本上我想加载一个图像(检查),使用它(检查),卸载它(半检查),然后再次加载它(失败)

以下是我所做的:

TileTexture = Texture2D.FromStream(GraphicsDevice, new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open));
它加载一个文本,工作正常,我可以画它没有问题,然后当我不想使用它时,我将它设置为null

this.TileTexture = null; 
它工作正常,图像消失,我可以再次从计算机上的任何位置加载其他图像(然后该图像被放入上一个纹理2D变量中),但当我想再次加载之前使用的图像时,即使现在另一个图像存储在该纹理2D变量中,我得到一个例外:

程序无法访问该文件,因为它正被另一个进程使用。(这将是我的程序)


然后,如何完全停止我的Monogame程序使用此图像,以便我可以在需要时在同一运行时再次访问它?

您正在方法调用中调用一个新的steam:

new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open))
相反,将其放在一个var中,然后调用.Close方法

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

您需要在处理完流后关闭它。与此相反:

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


使用
将负责关闭和处理流

然后如何完全停止我的Monogame程序使用此图像,以便我可以再次访问它:使用iThanks后关闭流,这很好;Dis Close();够了,还是我还需要Dispoe()?基本上关闭()在本例中调用Dispose。但“最佳实践”是用马特回答的“使用”方法处理
using (var fs = new System.IO.FileStream(tileTextureName, System.IO.FileMode.Open))
{
    TileTexture = Texture2D.FromStream(GraphicsDevice, fs);
}