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