public bool IncreaseCounter(string uniqueId, out RegisteredParameter registeredParameter)
        {
            bool result = false;

            registeredParameter = null;

            lock (_registeredParameterLocker)
            {
                foreach (var parameter in RegisteredParameters)
                {
                    if (parameter.UniqueId == uniqueId)
                    {
                        registeredParameter = parameter;
                        result = true;
                        break;
                    }
                }

                if (registeredParameter != null)
                {
                    registeredParameter.InstanceCount++;
                }
            }

            return(result);
        }
        private bool FindParameterInternal(string uniqueId, out RegisteredParameter registeredParameter)
        {
            bool result = false;

            registeredParameter = null;

            foreach (var parameter in RegisteredParameters)
            {
                if (parameter.UniqueId == uniqueId)
                {
                    registeredParameter = parameter;
                    result = true;
                    break;
                }
            }

            return(result);
        }
        public bool FindParameter(ushort index, byte subIndex, out RegisteredParameter registeredParameter)
        {
            bool result = false;

            registeredParameter = null;

            lock (_registeredParameterLocker)
            {
                foreach (var parameter in RegisteredParameters)
                {
                    if (parameter.Index == index && parameter.SubIndex == subIndex)
                    {
                        registeredParameter = parameter;
                        result = true;
                        break;
                    }
                }
            }

            return(result);
        }
        public bool FindParameter(string uniqueId, out RegisteredParameter registeredParameter)
        {
            bool result = false;

            registeredParameter = null;

            lock (_registeredParameterLocker)
            {
                foreach (var parameter in RegisteredParameters)
                {
                    if (parameter.UniqueId == uniqueId)
                    {
                        registeredParameter = parameter;
                        result = true;
                        break;
                    }
                }
            }

            return(result);
        }
        private int AddParameter(string uniqueId, ushort index, byte subIndex)
        {
            int result;

            if (FindParameterInternal(uniqueId, out var existingParameter))
            {
                existingParameter.InstanceCount++;

                result = existingParameter.InstanceCount;
            }
            else
            {
                var parameter = new RegisteredParameter(uniqueId, index, subIndex, _registeredParameterLocker)
                {
                    InstanceCount = 1
                };

                RegisteredParameters.Add(parameter);

                result = parameter.InstanceCount;
            }

            return(result);
        }
        public int AddParameter(RegisteredParameter registeredParameter)
        {
            int result = 0;

            if (FindParameter(registeredParameter.UniqueId, out var existingParameter))
            {
                existingParameter.InstanceCount++;

                result = existingParameter.InstanceCount;
            }
            else
            {
                lock (_registeredParameterLocker)
                {
                    registeredParameter.InstanceCount = 1;

                    RegisteredParameters.Add(registeredParameter);

                    result = registeredParameter.InstanceCount;
                }
            }

            return(result);
        }