C# 对象引用未设置为对象的实例-使用列表

C# 对象引用未设置为对象的实例-使用列表,c#,C#,我知道这可能会被标记为重复,但我看到了其他问题,他们没有澄清我。 这在一个线程上: int indexOfList = 0; long byteSent = 0; byte[] chunkToSend; while(bytesThatAreCompressed != byteSent || !finished) { if (indexOfList < listOfChunksToSen

我知道这可能会被标记为重复,但我看到了其他问题,他们没有澄清我。 这在一个线程上:

        int indexOfList = 0;
        long byteSent = 0;
        byte[] chunkToSend;

        while(bytesThatAreCompressed != byteSent || !finished)
        {
            if (indexOfList < listOfChunksToSend.Count)
            {
                int testinteger = listOfChunksToSend[indexOfList ].Length;
                chunkToSend= new byte[testinteger];
                chunkToSend= listOfChunksToSend[indexOfList ];

                int tamanhoBufferComprimido = (int)chunkToSend.Length;
                byte[] tamanhoChunkB = BitConverter.GetBytes(tamanhoBufferComprimido);
                streamligacao.Write(tamanhoChunkB, 0, tamanhoChunkB.Length);

                streamligacao.Write(chunkToSend, 0, tamanhoBufferComprimido);
                byteSent += chunkToSend.Length;
                indexOfList ++;
            }
        }
这是一个例外:

对象引用未设置为对象的实例

listOfChunksToSend是字节[]的列表

当它抛出这个异常时,我检查变量,没有任何错误


我做错了什么?我自己找到了答案

发生这种情况是因为线程之间存在混淆。此后,我添加了一个变量来存储列表的索引。因此,只有在流成功添加到byte[]列表之后,索引才会增加

更多说明:
这是使用列表和不同线程的特定问题。向列表中添加项时,即使尚未添加数据,也会在开始时增加索引。因此,如果您使用不同的线程,它们将无法正常工作。这就是为什么必须使用变量来存储索引的原因。并在项目添加到列表后增加该变量

代码更改:

线程1:

 int indexOfList = 0;
        long byteSent = 0;
        byte[] chunkToSend;

        while(bytesThatAreCompressed != byteSent || !finished)
        {
            if (indexOfList < lastAvailableIndex )
            {
                int testinteger = listOfChunksToSend[indexOfList ].Length;
                chunkToSend= new byte[testinteger];
                chunkToSend= listOfChunksToSend[indexOfList ];

                int tamanhoBufferComprimido = (int)chunkToSend.Length;
                byte[] tamanhoChunkB = BitConverter.GetBytes(tamanhoBufferComprimido);
                streamligacao.Write(tamanhoChunkB, 0, tamanhoChunkB.Length);

                streamligacao.Write(chunkToSend, 0, tamanhoBufferComprimido);
                byteSent += chunkToSend.Length;
                indexOfList ++;
            }
        }

发布所有相关代码并显示引发异常的行。您能翻译所有发生的变量吗?您正在初始化
indexOfList
,最后一行是
indexDaLista++
。我们可以推断出它的意思,但我们不能确定。我已经更新了代码,经过一个小时的搜索,我发现了这个问题。我会把它写在答案里,它不是复制品!那个问题的答案真的很模糊!这是一个使用列表和不同线程的特定问题。向列表中添加项时,即使尚未添加数据,也会在开始时增加索引。因此,如果您使用不同的线程,它们将无法正常工作。这就是为什么必须使用变量来存储索引的原因。并在项目添加到列表后增加该变量!
 int indexOfList = 0;
        long byteSent = 0;
        byte[] chunkToSend;

        while(bytesThatAreCompressed != byteSent || !finished)
        {
            if (indexOfList < lastAvailableIndex )
            {
                int testinteger = listOfChunksToSend[indexOfList ].Length;
                chunkToSend= new byte[testinteger];
                chunkToSend= listOfChunksToSend[indexOfList ];

                int tamanhoBufferComprimido = (int)chunkToSend.Length;
                byte[] tamanhoChunkB = BitConverter.GetBytes(tamanhoBufferComprimido);
                streamligacao.Write(tamanhoChunkB, 0, tamanhoChunkB.Length);

                streamligacao.Write(chunkToSend, 0, tamanhoBufferComprimido);
                byteSent += chunkToSend.Length;
                indexOfList ++;
            }
        }
listOfChunksToSend.Add(stream.ToArray());   
lastAvailableIndex = listOfChunksToSend.Count - 1;