/// <summary> /// Releases all ressources and orderly disconnects from Homegear. It might take a few seconds, before the method returns. /// </summary> public void Dispose() { if (_disposing) { return; } _disposing = true; _rpc.Disconnected -= _rpc_Disconnected; _rpc.InitCompleted -= _rpc_InitCompleted; _rpc.DeviceVariableUpdated -= _rpc_OnDeviceVariableUpdated; _rpc.SystemVariableUpdated -= _rpc_OnSystemVariableUpdated; _rpc.SystemVariableDeleted -= _rpc_OnSystemVariableDeleted; _rpc.MetadataUpdated -= _rpc_OnMetadataUpdated; _rpc.MetadataDeleted -= _rpc_OnMetadataDeleted; _rpc.NewDevices -= _rpc_OnNewDevices; _rpc.DevicesDeleted -= _rpc_OnDevicesDeleted; _rpc.UpdateDevice -= _rpc_OnUpdateDevice; _rpc.NewEvent -= _rpc_OnNewEvent; _rpc.EventDeleted -= _rpc_OnEventDeleted; _rpc.UpdateEvent -= _rpc_OnUpdateEvent; _stopConnectThread = true; if (_connectThread.IsAlive) { if (!_connectThread.Join(100)) { try { _connectThread.Abort(); } catch (Exception) { } } } _rpc.Disconnect(); }