-->

LibTiff.NET ReadDirectory是给System.ObjectDisposedEx

2019-09-21 16:01发布

编辑:FYI为未来的读者,这个问题已经被固定为BitMiracle的LibTiff.NET版本2.3.606.0的。

我使用BitMiracle的LibTiff.NET(版本2.3.605.0及以下)在我的C#库(在.NET 3.5编译| 86),并不断收到此异常,当我打电话ReadDirectorySystem.ObjectDisposedException: Cannot write to a closed TextWriter

我意识到,这似乎表明,我已经进行调用之前已经部署了我的形象的......但我没有特别这样做。 这是库中的一个错误还是我真的失去了一些东西?

这里是我的代码:

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

编辑:经过一些进一步的测试好吧,我有更多的信息,当我跑步时我的单元测试,这是唯一的发生! 不知道为什么这样做,虽然任何改变。

Answer 1:

由于其他线程试图(写入到控制台时谈论的单元测试并获得同样的错误的输出到控制台时的ObjectDisposedException )我意识到LibTiff.NET库试图写入错误控制台。 通过源代码看后,我发现这样的代码:

        using (TextWriter stderr = Console.Error)
        {
            ...
        }

因为他们在使用所有的写入错误的包裹出来,这是第一次写入到错误后进行处置的Console.Error对象。 这在第二次造成了我的错误左右(ReadDirectory做什么链表上调用下一步做)。 所以我删除了使用和问题解决了!

        TextWriter stderr = Console.Error;
        ...

因此,这里的教训:不处理你的标准输出的:)

我问过关于他们为什么从来都不允许在单元测试中,以配置标准输出的,但不是在这里的其他情形另一个问题: .NET -为什么只配置在单元测试允许的标准输出? 。 如果您有问题的任何答案......请有张贴。



文章来源: LibTiff.NET ReadDirectory is giving System.ObjectDisposedException Only During Unit Tests