private async void DevicePoller_DeviceDisconnected(object sender, DeviceEventArgs e) { try { await _Lock.WaitAsync(); var LedgerManager = LedgerManagers.FirstOrDefault(t => { var ledgerManagerTransport = t.RequestHandler as LedgerManagerTransport; return(ReferenceEquals(ledgerManagerTransport?.LedgerHidDevice, e.Device)); }); if (LedgerManager != null) { LedgerDisconnected?.Invoke(this, new LedgerManagerConnectionEventArgs(LedgerManager)); LedgerManager.Dispose(); var tempList = new List <IManagesLedger>(LedgerManagers); tempList.Remove(LedgerManager); LedgerManagers = new ReadOnlyCollection <IManagesLedger>(tempList); } } finally { _Lock.Release(); } }
private async void DevicePoller_DeviceInitialized(object sender, DeviceEventArgs e) { try { await _Lock.WaitAsync(); var LedgerManager = LedgerManagers.FirstOrDefault(t => ReferenceEquals(t.LedgerHidDevice, e.Device)); if (LedgerManager == null) { LedgerManager = new LedgerManager(e.Device, CoinUtility, ErrorPromptDelegate); var tempList = new List <LedgerManager>(LedgerManagers) { LedgerManager }; LedgerManagers = new ReadOnlyCollection <LedgerManager>(tempList); if (_FirstLedgerTaskCompletionSource.Task.Status == TaskStatus.WaitingForActivation) { _FirstLedgerTaskCompletionSource.SetResult(LedgerManager); } LedgerInitialized?.Invoke(this, new LedgerManagerConnectionEventArgs(LedgerManager)); } } finally { _Lock.Release(); } }