public void WriteAndReadThreadSafeDataToAcquisitionFile()
        {
            string filename    = Path.Combine(folder, "testWithThreadsDataAcquisition.H5");
            int    nr50samples = 1000;

            try
            {
                using (var writer = new Hdf5AcquisitionFileWriter(filename))
                {
                    var pc     = new ProducerConsumer(writer);
                    var header = FillHeader(writer.Header);
                    var data   = new List <double[]>();

                    for (int j = 0; j < nr50samples; j++)
                    {
                        for (int i = 0; i < header.Recording.NrOfChannels; i++)
                        {
                            var row = Enumerable.Range(0, 50).Select(x => i + j + x / 50.0).ToArray();
                            data.Add(row);
                        }
                        pc.Produce(data);
                        Thread.Sleep(10);
                        data.Clear();
                    }
                    //for (int i = 0; i < header.Recording.NrOfChannels; i++)
                    //{
                    //    var row = Enumerable.Range(0, 50).Select(x => i + 1 + x / 50.0).ToArray();
                    //    data.Add(row);
                    //}
                    //pc.Produce(data);
                    Thread.Sleep(1000);
                    pc.Done();

                    /*header.Recording.NrOfSamples = 100;
                     * for (int i = 0; i < header.Channels.Length; i++)
                     * {
                     *  header.Channels[i].NrOfSamples = header.Recording.NrOfSamples;
                     * }*/
                }
            }
            catch (Exception ex)
            {
                CreateExceptionAssert(ex);
            }

            try
            {
                using (var reader = new Hdf5AcquisitionFileReader(filename))
                {
                    var header = reader.Header;
                    Assert.IsTrue(header.Patient.Name == "Robert");
                    ulong samps = Convert.ToUInt64(50 * nr50samples);
                    Assert.IsTrue(header.Recording.NrOfSamples == samps);
                    Assert.IsTrue(header.Channels.Select(c => c.Label).SequenceEqual(new string[] { "DC01", "DC02", "DC03", "DC04", "DC05" }));
                    Assert.IsTrue(header.Channels.Select(c => c.NrOfSamples).SequenceEqual(new ulong[] { samps, samps, samps, samps, samps }));
                    var data = reader.ReadDouble(0, 49);
                    var sig  = data.First().Take(5);
                    Assert.IsTrue(sig.Similar(new double[] { 0, 1 / 50f, 2 / 50f, 3 / 50f, 4 / 50f }));
                    data = reader.ReadDouble(50, 99);
                    sig  = data.First().Take(5);
                    Assert.IsTrue(sig.Similar(new double[] { 50 / 50f, 51 / 50f, 52 / 50f, 53 / 50f, 54 / 50f }));
                }
            }
            catch (Exception ex)
            {
                CreateExceptionAssert(ex);
            }
        }