public int ReadFile(string path) { if (File.Exists(path)) { try { this.fileReader = new BinaryReader(File.Open(path, FileMode.Open)); while (fileReader.BaseStream.Position != fileReader.BaseStream.Length) { int category = fileReader.ReadByte(); byte[] lengthBytes = fileReader.ReadBytes(2); if (BitConverter.IsLittleEndian) { Array.Reverse(lengthBytes); } int length = BitConverter.ToInt16(lengthBytes, 0); if (Convert.ToInt16(category) == 10) { CAT10 dataBlock = new CAT10(length); List <byte> data = fileReader.ReadBytes(length - 3).ToList <byte>(); dataBlock.SetMessage(data); dataBlock.GetFSPEC(data); //dataBlock.FullDecode(); this.dataBlocks.Add(dataBlock); } else if (Convert.ToInt16(category) == 21) { CAT21 dataBlock = new CAT21(length); List <byte> data = fileReader.ReadBytes(length - 3).ToList <byte>(); dataBlock.SetMessage(data); dataBlock.GetFSPEC(data); //dataBlock.FullDecode(); this.dataBlocks.Add(dataBlock); } else { List <byte> data = fileReader.ReadBytes(length - 3).ToList <byte>(); } } Parallel.ForEach(dataBlocks, DataBlock => { DataBlock.FullDecode(); }); DecodeFlights(); return(0); } catch (Exception e) { return(-1); } } else { return(-2); } }