public void Start(HomeSimCockpitSDK.StartStopType StartStartStopType)
        {
            // nie ma żadnych zmiennych więc nie trzeba nic robić
            if (_variables == null || _variables.Length == 0)
            {
                return;
            }

            // wyczyszczenie słowników
            _inputsDictionary.Clear();
            _registeredVariables.Clear();

            // sprawdzenie czy są zmienne z zarejestrowanymi "słuchaczami"
            foreach (PMDGVariable input in _variables)
            {
                if (input.IsListenerRegistered)
                {
                    input.Module = this;
                    input.Reset();
                    input.FirstSet();
                    _registeredVariables.Add(input);
//					uint key = 0;
//					switch (input.Type)
//					{
//						case HomeSimCockpitSDK.VariableType.Bool:
//							key = BOOL_FLAG | input.FSXGroup;
//							break;
//
//						case HomeSimCockpitSDK.VariableType.Int:
//							key = INT_FLAG | input.FSXGroup;
//							break;
//
//						case HomeSimCockpitSDK.VariableType.Double:
//							key = DOUBLE_FLAG | input.FSXGroup;
//							break;
//
//						case HomeSimCockpitSDK.VariableType.String:
//							key = STRING_FLAG | input.FSXGroup;
//							break;
//					}
//					if (!_inputsDictionary.ContainsKey(key))
//					{
//						_inputsDictionary[key] = new List<FSXInput>();
//					}
//					_inputsDictionary[key].Add(input);
                }
            }

            if (_registeredVariables.Count == 0)
            {
                // nie ma żadnych zmiennych zarejestrowanych więc nie ma nic do roboty
                return;
            }

            // połączenie z FSX
            _working = true;
            OpenSimConnect();

            //_simconnect.RegisterDataDefineStruct<PMDG.PMDG_NGX_Data>(PMDG.PMDGEnum.PMDG_NGX_DATA_DEFINITION);
            _simconnect.MapClientDataNameToID(PMDG.PMDG737NGXSDK.PMDG_NGX_DATA_NAME, PMDG.PMDGEnum.PMDG_NGX_DATA_ID);
            _simconnect.AddToClientDataDefinition(PMDG.PMDGEnum.PMDG_NGX_DATA_DEFINITION, 0, (uint)Marshal.SizeOf(typeof(PMDG.PMDG_NGX_Data)), 0, 0);
            _simconnect.RequestClientData(PMDG.PMDGEnum.PMDG_NGX_DATA_ID, PMDG.PMDGEnum.DATA_REQUEST, PMDG.PMDGEnum.PMDG_NGX_DATA_DEFINITION,
                                          SIMCONNECT_CLIENT_DATA_PERIOD.ON_SET, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG.CHANGED, 0, 0, 0);
            _simconnect.RegisterStruct <SIMCONNECT_RECV_CLIENT_DATA, PMDG.PMDG_NGX_Data>(PMDG.PMDGEnum.PMDG_NGX_DATA_DEFINITION);

            //_simconnect.RegisterStruct<SIMCONNECT_RECV, PMDG.PMDG_NGX_Data>(PMDG.PMDGEnum.PMDG_NGX_DATA_DEFINITION);

            //            // pobranie metody "RegisterDataDefineStruct"
            //            Type simConnectType = _simconnect.GetType();
//
            //            // utworzenie Assembly i Module
            //            AssemblyBuilder asmBuilder = null;
            //            ModuleBuilder modBuilder = null;
            //            AssemblyName assemblyName = new AssemblyName();
            //            assemblyName.Name = "DynamicStructs";
            //            AppDomain thisDomain = Thread.GetDomain();
            //            asmBuilder = thisDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            //            modBuilder = asmBuilder.DefineDynamicModule(asmBuilder.GetName().Name, false);
//
            //            // utworzenie dynamicznie struktur do odbierania danych
            //            foreach (KeyValuePair<uint, List<FSXInput>> kvp in _inputsDictionary)
            //            {
            //                int index = 0;
            //                uint structId = kvp.Key;
            //                TypeBuilder typeBuilder = modBuilder.DefineType("Struct_bool_" + kvp.Key.ToString(), TypeAttributes.Public | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.SequentialLayout, typeof(ValueType));
            //                foreach (FSXInput input in kvp.Value)
            //                {
            //                    input._DynamicName = "field_" + (index++).ToString();
            //                    input._DynamicValue = null;
            //                    Type t = FSXTypeToType(input.FSXType);
            //                    typeBuilder.DefineField(input._DynamicName, t, FieldAttributes.Public);
            //                    _simconnect.AddToDataDefinition((DATA_DEFINITIONS)structId, input.FSXName, FSXUnitToFSXUnitName(input.FSXUnit), input.FSXType, input.FSXEpsilon, SimConnect.SIMCONNECT_UNUSED);
            //                }
            //                Type structType = typeBuilder.CreateType();
            //                MethodInfo dynamicMethod = _simconnect.GetType().GetMethod("RegisterDataDefineStruct").MakeGenericMethod(new Type[] { structType });
            //                dynamicMethod.Invoke(_simconnect, new object[] { (DATA_DEFINITIONS)structId });
//
            //                _simconnect.RequestDataOnSimObject((DATA_REQUESTS)(structId | FIRST_REQUEST_FLAG), (DATA_DEFINITIONS)structId, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.ONCE, SIMCONNECT_DATA_REQUEST_FLAG.DEFAULT, 0, 0, 0);
            //                _simconnect.RequestDataOnSimObject((DATA_REQUESTS)structId, (DATA_DEFINITIONS)structId, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SIM_FRAME, SIMCONNECT_DATA_REQUEST_FLAG.CHANGED, 0, 0, 0);
            //            }


            // wystartowanie wątka
            // (w wątku jednorazowane pobranie wartości
            // i żądanie uaktualnień wartości gdy się zmienią)



            //throw new NotImplementedException();
        }