public void InitRecording(ProgramSetting setting) { Mouse.OverrideCursor = Cursors.Wait; Busy.IsBusy = true; //Enable busy indicator to bolck main window //Use background thread to execute initialization ThreadPool.QueueUserWorkItem((object state) => { SensorInfos.Clear(); string conf = File.ReadAllText(setting.SensorConfPath); SensorInfos.AddRange(JsonConvert.DeserializeObject <List <SensorInfo> >(conf)); SelectedSensor = SensorInfos[0]; WindSensor = SensorInfos.Find(t => t.SensorType == SensorInfo.Types.Anemometer); //Find Anemometer if (WindSensor == null) { MessageBox.Show("No anemometer found in sensor list.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning); } else { Application.Current.Dispatcher.Invoke(() => //Use invoke to refresh UI elements { WindInfo.DataContext = WindSensor.SensorData; }); } dataLogger = new DataLoger(); string result = dataLogger.Init(setting); if (result == "Error") //If the Tapis is not available, abort init. { MessageBox.Show("Unable to refresh Tapis token.Please creat token manually."); return; } if (SerialCOM.IsOpen) { SerialCOM.Close(); } SerialCOM.InitCOM(setting.PortName, setting.BaudRate, new SerialDataReceivedEventHandler(SerialPort_DataReceived)); sensorWatcher.SetTimer(SensorInfos); Application.Current.Dispatcher.Invoke(() => //Use invoke to refresh UI elements { NodeList.Items.Refresh(); sciChartSurface.DataContext = SelectedSensor.SensorData.PlotControl; sll.DataContext = SelectedSensor.SensorData.PlotControl; lll.DataContext = SelectedSensor.SensorData.PlotControl; Status.DataContext = SelectedSensor.SensorData; CloudStatus.DataContext = dataLogger; StateManager = new StateManager(dataLogger, SerialCOM, dataBaseUtils, this, StateManager.State.Recording); ModeStatus.DataContext = StateManager; Mouse.OverrideCursor = null; Busy.IsBusy = false; //Disable busy indicator. }); }, null); }
private void CheckTapis(object sender, RoutedEventArgs e) { CheckBtn.IsEnabled = false; Mouse.OverrideCursor = Cursors.Wait; DataLoger dataLoger = new DataLoger(); Validation.DataContext = dataLoger; ThreadPool.QueueUserWorkItem((object state) => { dataLoger.Init(ProgramSetting); dataLoger.TryUpload(); Application.Current.Dispatcher.Invoke(() => //Use invoke to refresh UI elements { Mouse.OverrideCursor = null; CheckBtn.IsEnabled = true; if (dataLoger.isPass) { Validation.CanFinish = true; } }); }, null); }