private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (SerialCOM.IsOpen) { MessageBoxResult result = MessageBox.Show("Data recording. Do you want to exit?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { dataLogger?.AddData(null); try { File.Delete(ConstValues.BakFilePath); } catch { } e.Cancel = false; } else { e.Cancel = true; } } }
/// <summary> /// Data received event. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (!isCollecting) { return; } byte[] data = new byte[36]; try { while (SerialCOM.serialPort.ReadByte() != 255) { ; } while (SerialCOM.serialPort.BytesToRead < 36) { ; } SerialCOM.serialPort.Read(data, 0, 36); } catch (Exception ex) { Logger.Debug(ex, "Cannot read data from serial port."); return; } DataPackage dataPackage = DataPackage.Decode(data); if (dataPackage == null || !dataPackage.passCrc32) { return; } dataBaseUtils?.PostData(dataPackage); dataLogger.AddData(dataPackage.DataString); SensorInfo sensorInfo = SensorInfos.Find(x => x.SensorID == dataPackage.SensorID); if (sensorInfo == null) { //Add undefined sensor to list. SensorInfo info = new SensorInfo() { Name = "Undefind" + dataPackage.SensorID.ToString(), SensorID = dataPackage.SensorID, SensorType = (SensorInfo.Types)(dataPackage.SensorTYpe - 1), NetWorkID = dataPackage.NetworkID, }; SensorInfos.Add(info); Application.Current.Dispatcher.Invoke(() => //Use invoke to refresh UI elements { NodeList.Items.Refresh(); }); sensorInfo = info; //Set as Anemometer if it is not found before. if (WindSensor == null && info.SensorType == SensorInfo.Types.Anemometer) { WindSensor = info; } } if (sensorInfo.SensorType != (SensorInfo.Types)(dataPackage.SensorTYpe - 1)) { return; } //Add data to sensor data class and plot sensorInfo.SensorData.GetSensorData(dataPackage); if (sensorInfo == SelectedSensor) { using (sciChartSurface.SuspendUpdates()) { SelectedSensor.SensorData.PlotControl.RefreshLimit(DateTime.Now); LineSeries.DataSeries = SelectedSensor.SensorData.PressureLine; } } if (sensorInfo == WindSensor) { using (sciChartSurface.SuspendUpdates()) { WindSeries.DataSeries = WindSensor.SensorData.WindPlot; } } }