无法创建新的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应用程序中成功使用并测试了完全相同的代码,没有任何问题。
解决方法是将流转换为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;
}