首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibTiff.NET ReadDirectory只在单元测试期间给System.ObjectDisposedException

LibTiff.NET ReadDirectory只在单元测试期间给System.ObjectDisposedException
EN

Stack Overflow用户
提问于 2012-08-24 18:44:32
回答 1查看 319关注 0票数 0

编辑: FYI对未来的读者来说,这个问题已经修正为2.3.606.0版本的BitMiracle LibTiff.NET。

我在我的C#库中使用BitMiracle的C#库( 2.3.605.0及更低版本)(编译于.NET 3.5 \ x86),并在调用ReadDirectorySystem.ObjectDisposedException: Cannot write to a closed TextWriter时继续获取此异常。

我意识到,这似乎表明,在制作call...but之前,我已经处理好了我的图像,我还没有具体地这样做。这是图书馆里的错误还是我真的漏掉了什么?

这是我的代码:

代码语言:javascript
复制
    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,在进一步测试之后,我有更多的信息,只有在我运行单元测试时才会发生这种情况!我不知道为什么这会改变什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-24 21:50:13

由于其他线程在试图写入控制台(ObjectDisposedException when outputting to console)时讨论单元测试和获取相同的错误,我意识到LibTiff.NET库试图写入错误控制台。在查看了源代码之后,我发现这段代码:

代码语言:javascript
复制
        using (TextWriter stderr = Console.Error)
        {
            ...
        }

因为它们将错误的所有写入都包装在了using中,所以在第一次写入错误后,它将对Console.Error对象进行处理。这在第二次出现时导致了我的错误(ReadDirectory做了对链接列表的下一步调用)。所以我删除了使用,问题解决了!

代码语言:javascript
复制
        TextWriter stderr = Console.Error;
        ...

因此,这里的教训是:不要丢弃标准输出:)

--我问了另一个问题,为什么允许他们在单元测试中处理标准输出,而在其他情况下却不能处理: .NET - Why is disposing of standard output only allowed during unit tests?。如果你有任何答案的question...please张贴在那里。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12114992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档