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
将负责关闭和处理流
好的,基本上我想加载图像(检查)、使用它(检查)、卸载它(半检查)然后再次加载它(失败)...
这就是我所做的:
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
将负责关闭和处理流