public async void calibrate(Action func, CancellationToken token, MeasureMode mode, string calibtype)
{
btnCancelCalibration.Visibility = Visibility.Visible;
btnCalibrateIn.Visibility = Visibility.Hidden;
btnCalibrateOut.Visibility = Visibility.Hidden;
btnCalibrateLo.Visibility = Visibility.Hidden;
log("start calibrate: " + mode + ", " + calibtype);
var stopwatch = Stopwatch.StartNew();
dataTable = ((DataView)dataGrid.ItemsSource).ToTable();
calibrationTask = Task.Run(func, token);
dataGrid.ItemsSource = dataTable.AsDataView();
await calibrationTask;
btnCancelCalibration.Visibility = Visibility.Hidden;
btnCalibrateIn.Visibility = Visibility.Visible;
btnCalibrateOut.Visibility = Visibility.Visible;
btnCalibrateLo.Visibility = Visibility.Visible;
stopwatch.Stop();
log("end calibrate, run time: " + Math.Round(stopwatch.Elapsed.TotalMilliseconds / 1000, 2) + " sec");
sndAlert?.Play();
MessageBox.Show("Done.");
}