2016-04-07 14 views
-3

Bunun muhtemelen çoğaltılacak şekilde işaretleneceğini biliyorum, ancak başka soruları gördüm ve bana açıklık getirmiyorlar. Bu, bir iplik üzerinde:Nesne başvurusu bir nesnenin örneğine ayarlanmadı - LIST kullanımı

 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 ++; 
      } 
     } 

ve bu başka bir iş parçacığı üzerinde:

nesne başvurusu, bir örneğine verilmedi:

listOfChunksToSend.Add(stream.ToArray()); 

Bu exeption atma nesne .

listOfChunksToSend byte listesidir []

ben değişkenleri kontrol etmek ve yanlış bir şey yok bu istisna atar zaman!

Neyi yanlış yapıyorum?

Cevabın kendim buldum
+1

Mesaj ilgili tüm kod ve istisna atılır satırı gösterilir. –

+0

Değişkenlerinizin tüm oluşumlarını tercüme edebilir misiniz? 'indexOfList' ve son satır okumalarınızı 'indexDaLista ++' başlatıyorsunuz. Mümkün olan anlamı anlayabiliriz, ama emin olamayız. – Marco

+0

Kodu güncelledim ve aramadan 1 saat sonra problemi buldum. cevapları koyacağım. – meme

cevap

0

..

Bunun nedeni konuları arasında kafa karıştırıcı bir oluyor. O zamandan beri listenin indeksini saklamak için bir değişken ekledim. Böylece sadece akış başarılı bir şekilde byte [] listesine eklendikten sonra indeks artar.

Daha fazla açıklama: Bu, bir liste ve farklı konuların kullanımıyla ilgili belirli bir sorun oldu. Bir listeye öğeler eklerken, veri eklenmesi henüz yapılmasa bile endeksi başlangıçta artırır. Yani farklı bir iş parçacığı kullanıyorsanız doğru çalışmıyorlar. Dizin depolamak için bir değişken kullanmanızın nedeni budur. ve öğeden sonra bu değişkeni arttırmak listeye eklenir!

Kod değişikliği:

Konu 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 ++; 
      } 
     } 

Konu 2:

listOfChunksToSend.Add(stream.ToArray()); 
lastAvailableIndex = listOfChunksToSend.Count - 1; 
İlgili konular