C#System.ArgumentException:目标数组不够长

杰夫·梅林

我有一个通用的Queue对象,它是从SerialPort.DataReceived方法提供的。

有时,在调用ToArray()方法时会出现异常“目标数组不够长”。代码:

        byte[] tmpArray;

        try
        {
            tmpArray = queue.ToArray();
        }
        catch (Exception ex) 
        {

记录:queue.Count永远不会超过500。

尽管这很可能是线程问题,但我不理解该异常。什么时候目标数组在队列的ToArray()方法中会太短?

如果这是线程问题,那么从串行端口向队列获取数据时的最佳实践是什么?

顺便说一句:我写之前锁定队列。也许我也应该在ToArray()之前将其锁定?

杰夫·梅林

我想回答我自己的问题,或者至少对奇怪的异常消息给出一个假设。

这更像是对异常消息的问题,为什么框架告诉我一个数组太小,即使创建该数组不由我决定。

由于这很可能是与线程相关的问题,所以Queue.ToArray()抛出异常的唯一途径是,“目标数组不够长”是当队列本身在另一个线程中增长而ToArray试图复制它时。

ToArray方法为我们提供了一个新的数组。因此,必须首先分配该阵列,然后将数据从队列复制到该阵列。如我所说,SerialPort.DataReceived事件处理程序负责将元素添加到队列中。如果在分配数组后立即触发SerialPort.DataReceived事件,则队列将大于数组。

框架很难或不可能检测到这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#System.ArgumentException:目标数组不够长

来自分类Dev

目标数组不够长。在 mvc 中检查 destIndex 和长度,以及数组的下限

来自分类Dev

目标C:数组

来自分类Dev

目标C。C数组的属性

来自分类Dev

目标c中的唯一标识符(长整数)

来自分类Dev

使用数组目标C / iOS

来自分类Dev

目标c中的UIImageView数组

来自分类Dev

UWP C#/ XAML:System.ArgumentException(超出预期范围)

来自分类Dev

如何在 C# 中修复“System.ArgumentException”?

来自分类Dev

如何从目标C中的id筛选数组?

来自分类Dev

更改目标c中多维数组的值?

来自分类Dev

Three.js Tubes 不够长

来自分类Dev

Y 轴不够长(对数刻度)

来自分类Dev

临时值存在的时间不够长

来自分类Dev

发生System.ArgumentException

来自分类Dev

将长整数转换为C中的int数组

来自分类Dev

声明一个新的长数组C ++

来自分类Dev

C# SQL Server 数据转长数组

来自分类Dev

MongoDB C#-LINQ包含针对字符串数组的抛出ArgumentException

来自分类Dev

MongoDB C#-LINQ包含针对字符串数组的抛出ArgumentException

来自分类Dev

我可以在目标C NSArray中添加C数组吗?

来自分类Dev

JSON响应中NSDictionary内部的对象数组-目标c

来自分类Dev

目标C中数组的addObject和initWithObjects差异

来自分类Dev

可以在目标c中快速使用数组归约概念吗?

来自分类Dev

从目标c中的数组中找到最大日期

来自分类Dev

从目标C中的可变数组中删除空对象

来自分类Dev

目标C中的字符串块和数组

来自分类Dev

从csv目标C创建浮点数组

来自分类Dev

数组中的多个字典并检查重复的键-目标C