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

C# - Monogame - Program still uses an image after setting it to null

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

这就是我所做的:

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

它加载了一个纹理,工作正常,我可以绘制它没问题,然后当我不想使用它时我将它设置为空

this.TileTexture = null; 

它工作正常,图像消失了,并且我能够再次从我计算机上的任何地方加载一些其他图像(然后该图像被放入那个 Texture2D 变量中前一个是),但是当我想再次加载我之前使用过的图像时,即使现在另一个图像存储在那个 Texture2D 变量中,我也会得到一个异常:

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

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

您正在调用新的方法调用:

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));

尝试:

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

using 将负责关闭和处理流