private void checkBoxReadVoltage_CheckedChanged(object sender, EventArgs e) { if (_usbI2C.IsOpen()) { if (checkBoxReadVoltage.Checked) { checkBoxReadVoltage.Text = "Stop"; comboBoxAdcMode.Enabled = false; comboBoxChannel.Enabled = false; comboBoxSize.Enabled = false; comboBoxGain.Enabled = false; _backgroundWorkerAdc = new BackgroundWorker(); _backgroundWorkerAdc.DoWork += BackgroundWorkerAdcDoWork; _backgroundWorkerAdc.ProgressChanged += BackgroundWorkerAdcProgressChanged; _backgroundWorkerAdc.WorkerReportsProgress = true; _backgroundWorkerAdc.WorkerSupportsCancellation = true; AdcMode mode = AdcMode.Raw; MCP3424.AdcChannel channel = MCP3424.AdcChannel.Channel0; MCP3424.AdcSize size = MCP3424.AdcSize.Size12Bit; MCP3424.AdcPga pga = MCP3424.AdcPga.Gain1; try { Enum.TryParse <AdcMode>(comboBoxAdcMode.SelectedValue.ToString(), out mode); Enum.TryParse <MCP3424.AdcChannel>(comboBoxChannel.SelectedValue.ToString(), out channel); Enum.TryParse <MCP3424.AdcSize>(comboBoxSize.SelectedValue.ToString(), out size); Enum.TryParse <MCP3424.AdcPga>(comboBoxGain.SelectedValue.ToString(), out pga); } catch (Exception ex) { string error = ex.Message; } AdcBackgroundWorkerArgs args = new AdcBackgroundWorkerArgs(mode, channel, size, pga); _backgroundWorkerAdc.RunWorkerAsync(args); } else { checkBoxReadVoltage.Text = "Start"; comboBoxAdcMode.Enabled = true; comboBoxChannel.Enabled = true; comboBoxSize.Enabled = true; comboBoxGain.Enabled = true; if (_backgroundWorkerAdc != null && _backgroundWorkerAdc.IsBusy) { _backgroundWorkerAdc.CancelAsync(); } Thread.Sleep(1000); } } }
private void BackgroundWorkerAdcDoWork(object sender, DoWorkEventArgs e) { var adc = new ere_I2C_AI418ML(_usbI2C, _ere_I2C_AI418ML_address); UsbI2C.StatusResults statusResults = new UsbI2C.StatusResults(); AdcBackgroundWorkerArgs args = e.Argument as AdcBackgroundWorkerArgs; while (true) { uint reading = 0; double voltage = 0.0; double current = 0.0; ReportAdcProgressWithStatus adcProgress = new ReportAdcProgressWithStatus(args.Mode, reading, voltage, current, statusResults); switch (args.Mode) { case AdcMode.Raw: statusResults = adc.ReadAdc(args.Channel, args.Size, args.Pga, out reading); adcProgress.Reading = reading; break; case AdcMode.Voltage: statusResults = adc.ReadVoltage(args.Channel, args.Size, args.Pga, out voltage); adcProgress.Voltage = voltage; break; case AdcMode.Current: statusResults = adc.ReadCurrent(args.Channel, args.Size, args.Pga, out voltage); adcProgress.Voltage = voltage; break; } _backgroundWorkerAdc.ReportProgress(0, adcProgress); Thread.Sleep(100); if (statusResults.HasErrors() || _backgroundWorkerAdc.CancellationPending) { e.Cancel = true; return; } } }