private void OnDataWritten(IAsyncResult result) { if (waveformType == WaveformType.DigitalIO) { if (DAQTask != null && DAQTask == result.AsyncState) { writer.EndWrite(result); long elapsed = delaystopwatch.ElapsedTicks; if (stopimmediate || (!running && GetSignalLevel(waveform[lastStateIdx].state) == false)) { stopped = true; return; } long durationMicrosec = waveform[lastStateIdx].durationMicroSec - Convert.ToInt64(elapsed / microsec2ticks); NOP(durationMicrosec); delaystopwatch.Restart(); if (stopimmediate || (!running && GetSignalLevel(waveform[lastStateIdx].state) == false)) { stopped = true; return; } bool nextLevel = prepareNextTransition(); try { writer.BeginWriteSingleSampleSingleLine(true, nextLevel, new AsyncCallback(OnDataWritten), DAQTask); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }
private void OnDataWritten(IAsyncResult result) { if (DAQTask != null && DAQTask == result.AsyncState) { writer.EndWrite(result); if (!running && GetSignalLevel(waveform[lastStateIdx].state) == false) { stopped = true; return; } System.Threading.Thread.Sleep(waveform[lastStateIdx].durationMilliSec); //if (running || GetSignalLevel(waveform[lastStateIdx].state) == true) { lastStateIdx = (++lastStateIdx) % waveform.Length; bool signalLevel = GetSignalLevel(waveform[lastStateIdx].state); if (!periodicWaveform) { if (rnd == null) { rnd = new Random(); } if (signalLevel == true) { waveform[lastStateIdx].durationMilliSec = rnd.Next(onMinDuration, onMaxDuration); } else { waveform[lastStateIdx].durationMilliSec = rnd.Next(offMinDuration, offMaxDuration); } } WaveformEventArgs transitionevent; if (signalLevel == true) { transitionevent = new WaveformEventArgs(DigitalLineTransition.ToHigh); } else { transitionevent = new WaveformEventArgs(DigitalLineTransition.ToLow); } OnWaveformTransition(transitionevent); try { writer.BeginWriteSingleSampleSingleLine(true, signalLevel, new AsyncCallback(OnDataWritten), DAQTask); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // else // { // if (writer != null) // writer.EndWrite(result); // } } }