/// <summary> /// Aggiunge un elemento della coda in modalità thread-safe /// </summary> /// <param name="rs232Data"></param> public void EnqueueElementToRS232DataQueue(RS232Data rs232Data) { if (rs232Data != null && _rs232DataQueue != null) { lock (_rs232DataQueue) { _rs232DataQueue.Enqueue(rs232Data); } } }
/// <summary> /// Effettua la pop di un elemento della coda in modalita' thread-safe /// </summary> /// <returns>Elemento della coda</returns> private RS232Data DequeueElementToRS232DataQueue() { RS232Data sensorData = null; if (_rs232DataQueue != null) { lock (_rs232DataQueue) { if (_rs232DataQueue.Count > 0) { _rs232DataQueue.TryDequeue(out sensorData); } } } return(sensorData); }
/// <summary> /// Effettua lo svuotamento della coda dei dati con successiva scrittura sulla porta seriale /// </summary> private void Action() { while (!_requestStop) { if (_serialPort.IsOpen) { _tempRs232Data = DequeueElementToRS232DataQueue(); if (_tempRs232Data != null) { _serialPort.Write(_tempRs232Data.ToArray(), 0, BUFFER_SIZE); } } Thread.Sleep(500); } }