/// <summary> /// Lista elem küldése, azonnal teszi a Queue-ba. /// </summary> public void Send(object item) { var senderItem = item as CanTxMessageItem; if (senderItem != null) { if (_isRunning) { var msg = new CommonCanMessage { Source = "Message Sender Collection By Click Trigger", Name = senderItem.Name, Data = senderItem.Data, Remote = senderItem.Remote, ArbitrationId = senderItem.ArbitrationId, Type = senderItem.Type, Description = senderItem.Description, Documentation = senderItem.Documentation, }; TxQueue.Enqueue(msg); } } else { throw new InvalidCastException(); } }
/// <summary> /// Futtatja a periodikus küldést. /// </summary> private void DoWork() { foreach (var item in this) { item.LastUpdateDateTimeTicks = DateTime.Now.Ticks; } do { try { lock (((ICollection)this).SyncRoot) /*Bejáráskor nem válozhat a lista!*/ { var dateTimeNow = DateTime.Now.Ticks; foreach (var item in this) { if (item.IsPeriod && (dateTimeNow - item.LastUpdateDateTimeTicks >= item.PeriodTime * 10000)) { Debug.WriteLine(GetType().Namespace + "." + GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "(): Last Period:" + ((dateTimeNow - item.LastUpdateDateTimeTicks) / (double)10000).ToString("N3")); item.LastUpdateDateTimeTicks = dateTimeNow; var msg = new CommonCanMessage { Source = "Periodic Sender", Name = item.Name, Data = item.Data, Remote = item.Remote, ArbitrationId = item.ArbitrationId, Type = item.Type, Documentation = item.Documentation, Description = item.Description, }; TxQueue.Enqueue(msg); } } Thread.Sleep(_threadSleepMs); } } catch (Exception ex) { Debug.WriteLine(GetType().Namespace + "." + GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "(): DoWork is now shutdown by Loop Fuction Exception."); LastException = ex; break; } if (_shutdownEvent.WaitOne(0)) { Debug.WriteLine(GetType().Namespace + "." + GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "(): DoWork is now shutdown!"); break; } } while (_isRunning); _isRunning = false; TxQueue?.Clear(); Debug.WriteLine(GetType().Namespace + "." + GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "(): Loop is colsed..."); }