编辑: FYI对未来的读者来说,这个问题已经修正为2.3.606.0版本的BitMiracle LibTiff.NET。
我在我的C#库中使用BitMiracle的C#库( 2.3.605.0及更低版本)(编译于.NET 3.5 \ x86),并在调用ReadDirectory:System.ObjectDisposedException: Cannot write to a closed TextWriter时继续获取此异常。
我意识到,这似乎表明,在制作call...but之前,我已经处理好了我的图像,我还没有具体地这样做。这是图书馆里的错误还是我真的漏掉了什么?
这是我的代码:
public static bool IsTiffBiTonal(String tiffFilePath)
{
VerifyFileExistence(tiffFilePath);
using (Tiff tiff = Tiff.Open(tiffFilePath, "r"))
{
do
{
if (tiff.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt() == 1)
{
continue;
}
return false;
}
while (tiff.ReadDirectory()); //Error occurs here
}
return true;
}编辑: Ok,在进一步测试之后,我有更多的信息,只有在我运行单元测试时才会发生这种情况!我不知道为什么这会改变什么。
发布于 2012-08-24 21:50:13
由于其他线程在试图写入控制台(ObjectDisposedException when outputting to console)时讨论单元测试和获取相同的错误,我意识到LibTiff.NET库试图写入错误控制台。在查看了源代码之后,我发现这段代码:
using (TextWriter stderr = Console.Error)
{
...
}因为它们将错误的所有写入都包装在了using中,所以在第一次写入错误后,它将对Console.Error对象进行处理。这在第二次出现时导致了我的错误(ReadDirectory做了对链接列表的下一步调用)。所以我删除了使用,问题解决了!
TextWriter stderr = Console.Error;
...因此,这里的教训是:不要丢弃标准输出:)
--我问了另一个问题,为什么允许他们在单元测试中处理标准输出,而在其他情况下却不能处理: .NET - Why is disposing of standard output only allowed during unit tests?。如果你有任何答案的question...please张贴在那里。
https://stackoverflow.com/questions/12114992
复制相似问题