2016-04-07 30 views
-3

我知道這可能會被標記爲重複,但我已經看到其他問題,但他們沒有澄清我。 這是一個線程:未將對象引用設置爲對象的實例 - 使用LIST

 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.Add(stream.ToArray()); 

它扔exeption:

的對象引用未設置爲一個實例對象。

listOfChunksToSend是字節的名單[]

當拋出這個例外,我檢查變量並沒有什麼錯!

我在做什麼錯?

+1

後所有相關的代碼,並顯示該異常被拋出就行了。 –

+0

你能翻譯你的變量的所有發生嗎?你正在初始化'indexOfList',你的最後一行是'indexDaLista ++'。我們可以推斷出其含義,但我們無法確定。 – Marco

+0

我已經更新了代碼,經過1小時的搜索,我發現他有問題。我會把它放在答案中。 – meme

回答

0

我已經找到自己的答案..

這是因爲線程之間發生混淆。我已經添加了一個變量來存儲列表的索引。因此,只有在流成功添加到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 ++; 
      } 
     } 

線程2:

listOfChunksToSend.Add(stream.ToArray()); 
lastAvailableIndex = listOfChunksToSend.Count - 1; 
相關問題