private void OpenEncodeButton_Click(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "Encoded files(*.dat)|*.dat"; if (openFileDialog1.ShowDialog() != true) { return; } BinaryFormatter formatter = new BinaryFormatter(); //read file //using FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.OpenOrCreate); EncryptedBlock <byte>[] encrypteds = Parser.Decode(File.ReadAllBytes(openFileDialog1.FileName));//(EncryptedBlock<byte>[])formatter.Deserialize(fs); //decode IEnumerable <byte>[] result = new IEnumerable <byte> [encrypteds.Length]; Parallel.For(0, encrypteds.Count(), (i) => { var temp = encrypteds[i]; var encoded = ArithmeticCoder.Decode(temp.Message, temp.Ranges, temp.Length); result[i] = encoded; }); //merge using MemoryStream image = new MemoryStream(); foreach (var i in result) { image.Write(i.ToArray(), 0, i.Count()); } var img = ConvertByteArrayToBitmapImage(image.ToArray()); EncodedPicture.Source = img; }