private void AnalogInCallback(IAsyncResult ar) { try { if (runningTask != null && runningTask == ar.AsyncState) { // Read the available data from the channels data = analogInReader.EndReadWaveform(ar); //package it into a form LSL likes (samples by channel double[,]) var results = data.Select(analogWaveform => analogWaveform.GetRawData()).ToList(); var arr = new double[results[0].Length,results.Count]; for (int i = 0; i < results.Count; i++) { for (int j = 0; j < results[0].Length; j++) { arr[j, i] = results[i][j]; } } //stuff it out. Outlet.push_chunk(arr); // Plot your data here dataToDataTable(data, ref dataTable); analogInReader.BeginMemoryOptimizedReadWaveform(Convert.ToInt32(samplesPerChannelNumeric.Value), analogCallback, myTask, data); } } catch (DaqException exception) { // Display Errors MessageBox.Show(exception.Message); runningTask = null; myTask.Dispose(); stopButton.Enabled = false; startButton.Enabled = true; } }