无法创建新的ConcurrentQueue在Windows 10上

本文关键字:Windows byte 创建 ConcurrentQueue | 更新日期: 2023-09-27 18:10:26

我试图在Windows 10应用程序中使用HashLib库,但它抛出一个未处理的异常(System.MethodAccessException):

尝试方法"HashLib.Hash.TransformStream(先。流,Int64)'访问方法'System.Collections.Concurrent.ConcurrentQueue ' 1.. tor()'失败。

没有进一步的信息。抛出异常的确切行位于HashLib的源文件Hash.cs的第380行:

System.Collections.Concurrent.ConcurrentQueue<byte[]> queue = new System.Collections.Concurrent.ConcurrentQueue<byte[]>();

我在MSDN上找不到任何关于这个问题的线索。我刚刚看到它甚至在一个可移植的类库中得到支持,所以我认为它也应该在一个普通的Windows 10应用程序中工作。在WPF应用程序和Windows 8.1应用程序中成功使用并测试了完全相同的代码,没有任何问题。

无法创建新的ConcurrentQueue<byte[]>在Windows 10上

解决方法是将流转换为byte[],它解决了问题。

    public static string MakeHashForFile(Stream fileStream)
    {
        //HashResult hashResult = hashImplementation.ComputeStream(fileStream);
        byte[] bytes = GetBytesFromStream(fileStream);
        HashResult hashResult = hashImplementation.ComputeBytes(bytes);
        return hashResult.ToString().Replace("-", String.Empty).ToLowerInvariant();
    }
    private static byte[] GetBytesFromStream(Stream stream)
    {
        byte[] result;
        using (MemoryStream reader = new MemoryStream())
        {
            stream.CopyTo(reader);
            result = reader.ToArray();
        }
        return result;
    }