2017-09-22 102 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的答案一样使用“使用”方法 –

相关问题