public void Dispose() { pipeCanceller.Dispose(); if (_writeThread != null) { _writeThread.Dispose(); _writeThread = null; } if (_readThread != null) { _readThread.Dispose(); _readThread = null; } if (_chModeTasks != null) { if (_chModeTasks[0] != null) { _chModeTasks[0].Dispose(); _chModeTasks[0] = null; } if (_chModeTasks.Length > 1 && _chModeTasks[1] != null) { _chModeTasks[1].Dispose(); _chModeTasks[1] = null; } _chModeTasks = null; _chModeWriters = null; } }
/// <summary> /// Stops all acquisition and generation /// </summary> public void Stop() { if (!IsRunning) { return; } _writeThreadReady.Reset(); if (_writeThread != null) { _writeThread.Stop(); _writeThread.Dispose(); _writeThread = null; } if (_readThread != null) { _readThread.Stop(); _readThread.Dispose(); _readThread = null; } //Reset all writes to 0 Task resetTask = new Task("ChReset"); for (int i = 0; i < 3; i++) { resetTask.AOChannels.CreateVoltageChannel(HardwareSettings.DAQ.DeviceName + "/" + string.Format("AO{0}", i), "", -10, 10, AOVoltageUnits.Volts); } AnalogMultiChannelWriter resetWriter = new AnalogMultiChannelWriter(resetTask.Stream); resetWriter.WriteSingleSample(true, new double[3]); resetTask.Dispose(); pipeCanceller.Cancel(); IsRunning = false; }
protected override void Dispose(bool disposing) { //Stop acquisition if (_acquisitionThread != null) { _acquisitionThread.Dispose(); _acquisitionThread = null; } if (_maskImage != null) { _maskImage.Dispose(); _maskImage = null; } base.Dispose(disposing); }
/// <summary> /// Starts acquisition and generation /// </summary> public void Start(Func <long, int, double[, ]> sampleFunction = null, long maxSamplesRead = -1) { if (IsRunning) { System.Diagnostics.Debug.WriteLine("Tried to start acquisition while running"); return; } _readThread = new WorkerT <long>(ReadThreadRun, maxSamplesRead, true, 3000); if (sampleFunction != null) { _writeThread = new WorkerT <Func <long, int, double[, ]> >(WriteThreadRun, sampleFunction, true, 3000); } else { _writeThreadReady.Set(); } IsRunning = true; }
public MainViewModel() { ExperimentName = "Experiment01"; FishName = "TLAB"; Comment = ""; MaskRadius = 360; DOB = DateTime.Now - new TimeSpan(5, 0, 0, 0); DisplayImage = ImageType.Camera; if (IsInDesignMode) { return; } _mainImage = new EZImageSource(); _fishImage = new EZImageSource(); var preview = new PreviewTrack(Properties.Settings.Default.FrameRate, Properties.Settings.Default.PixelsPermm); _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, preview, true, 3000); }
/// <summary> /// Restarts image preview /// </summary> void RestartPreview() { //Don't do this while an experiment is running if (IsRunning) { return; } //shut down acquisition thread if (_acquisitionThread != null) { _acquisitionThread.Dispose(); } //restart preview FrameIndex = 0; var preview = new PreviewTrack(Properties.Settings.Default.FrameRate, Properties.Settings.Default.PixelsPermm); _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, preview, true, 3000); }
/// <summary> /// Stop running experiment and switch back to preview /// </summary> void Stop() { if (!IsRunning) { return; } IsRunning = false; //shut down experimental threads if (_acquisitionThread != null) { _acquisitionThread.Dispose(); } //experiment stopped, restart preview FrameIndex = 0; var preview = new PreviewTrack(Properties.Settings.Default.FrameRate, Properties.Settings.Default.PixelsPermm); _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, preview, true, 3000); }
/// <summary> /// Start a new experiment /// </summary> void Start() { if (IsRunning) { return; } //create experimental class ExperimentBase exp = null; if (ExperimentViewModel != null) { exp = ExperimentViewModel.CreateExperiment(ExperimentName, FishName); } else { System.Diagnostics.Debug.WriteLine("No experiment view model was active. Exiting."); return; } if (exp == null) { MessageBox.Show("Could not create experiment. Check parameters.", "Failure to launch", MessageBoxButton.OK, MessageBoxImage.Error); return; } exp.Comment = Comment; exp.DOB = DOB; exp.DishCenter = DishCenter; exp.Radius = MaskRadius; exp.WriteExperimentInformation(); //dispose previewthread if (_acquisitionThread != null) { _acquisitionThread.Dispose(); } //start experimental threads FrameIndex = 0; _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, exp, true, 3000); IsRunning = true; }