2013-02-22 3 views
-3

Я разрабатываю приложение WPF. В этом приложении я читал из нескольких файлов txt с помощью Taks (поток) и отображал их.Weird error in C# WPF

Иногда я получаю исключение

массив назначения не является достаточно долго, чтобы скопировать все элементы в коллекции. Проверьте индекс и длину массива.

И подробно я могу читать:

C: \ Windows \ mscorlib.pdb: Не удается найти или открыть файл PDB.

И:

Первый шанс исключение типа «System.ArgumentException» произошло в mscorlib.dll

Я понятия не имею, не должны были начать отладку, и нет никакой закономерности над это странное исключение.

UPDATE: Код для чтения текстового файла:

 public void LoadCompassLogFile(String fileName) { 
     //Thread.CurrentThread.Priority = ThreadPriority.Highest; 
     if (!fileName.Contains("Compass")) { 
      throw new FileLoadException("Wrong File"); 
     } 

     CompassLogLoadCompleted = false; 
     CompassLogLoadPercent = 0; 
     _compassLogCollection.Clear(); 

     int numberOfSingleLineLog = 0; 
     String[] lines = new string[] {}; 

     String temp = ""; 
     DateTime dateTime = new DateTime(); 
     LoggingLvl loggingLvl = new LoggingLvl(); 
     LoggingLvl.ELoggingLvl eLoggingLvl = new LoggingLvl.ELoggingLvl(); 
     char[] delimiters = new[] {' '}; 
     string threadId = ""; 
     string loggingMessage = ""; 
     int ff = 0; 

     // Read the File and add it to lines string 
     try { 
      lines = File.ReadAllLines(fileName); 
     } catch (Exception e) { 
      CompassLogLoadCompleted = true; 
      CoreServiceLogLoadCompleted = true; 
      Console.WriteLine("The file could not be read:"); 
      Console.WriteLine(e.Message); 
     } 

     string[] parts; 

     for (int j = 0; j < lines.Count(); j++) { 
      string dateAndTimestamp = ""; 
      if (!CompassLogLoadCompleted) { 
       try { 
        lock (_myLock) { 
         parts = lines[j].Split(delimiters, 
               StringSplitOptions. 
                RemoveEmptyEntries); 
        } 

        numberOfSingleLineLog++; 
        foreach (string t in parts) { 
         switch (ff) { 
          case 0: 
           dateAndTimestamp = t; 
           break; 
          case 1: 
           dateAndTimestamp += " " + t.Replace(",", "."); 
           dateTime = DateTime.Parse(dateAndTimestamp); 
           dateAndTimestamp = ""; 
           break; 
          case 2: 
           eLoggingLvl = loggingLvl.ParseLoggingLvl(t); 
           break; 
          case 3: 
           threadId = t; 
           break; 

          default: 
           temp += t; 
           break; 
         } 

         ff++; 
        } 

        loggingMessage = temp; 

        temp = ""; 

        ff = 0; 

        loggingLvl = new LoggingLvl(eLoggingLvl); 

        CompassLogData cLD = new CompassLogData(
         numberOfSingleLineLog, 
         dateTime, 
         loggingLvl, threadId, 
         loggingMessage); 

        _compassLogCollection.Add(cLD); 

        //loggingMessage = ""; 
       } catch (Exception ex) { 
        Console.Out.WriteLine("Shit Happens"); 
        Console.Out.WriteLine(ex.StackTrace); 
       } 
       CompassLogLoadPercent = ((double) j 
             /lines.Count())*100; 
      } 
     } 

     CompassLogLoadCompleted = true; 
     Console.Out.WriteLine("Compass LOADING DONE"); 

     Console.Out.WriteLine("numberOfSingleLineLog: " + 
           numberOfSingleLineLog); 
     Console.Out.WriteLine(""); 
    } 
+0

постить код может помочь ... – GrandMasterFlush

+0

я действительно хочу, но я понятия не имею, какую часть поста ... The Aplication содержащее множество кодов ... – RayOldProf

+0

Части, в которых вы используете массивы. ^^ –

ответ

0

Я думаю, что длина массива составляет не более 2 Гб в .net, так в зависимости от того, какого типа вы ставите в него нужно разделить (2^31)/8 для длинного [] и для байта, я думаю, его (2^31)/4, что составляет около 500 МБ. Ваши файлы больше?

В вашей второй проблеме, что он не может найти PDB, выберите Tools -> Options -> Debugging -> Symbols и выберите Microsoft Symbol Servers, это может решить проблему.

Если у вас есть достаточно информации, это может исправить ваш последний вопрос также ...