private async void DevicePoller_DeviceDisconnected(object sender, DeviceEventArgs e) { try { await _Lock.WaitAsync().ConfigureAwait(false); var trezorManager = TrezorManagers.FirstOrDefault(t => ReferenceEquals(t.Device, e.Device)); if (trezorManager == null) { return; } TrezorDisconnected?.Invoke(this, new TrezorManagerConnectionEventArgs <TMessageType>(trezorManager)); trezorManager.Dispose(); var tempList = new List <T>(TrezorManagers); _ = tempList.Remove(trezorManager); TrezorManagers = new ReadOnlyCollection <T>(tempList); } finally { _ = _Lock.Release(); } }
private async void DevicePoller_DeviceInitialized(object sender, DeviceEventArgs e) { try { await _Lock.WaitAsync().ConfigureAwait(false); var trezorManager = TrezorManagers.FirstOrDefault(t => ReferenceEquals(t.Device, e.Device)); if (trezorManager != null) { return; } trezorManager = CreateTrezorManager(e.Device); var tempList = new List <T>(TrezorManagers) { trezorManager }; TrezorManagers = new ReadOnlyCollection <T>(tempList); await trezorManager.InitializeAsync().ConfigureAwait(false); if (_FirstTrezorTaskCompletionSource.Task.Status == TaskStatus.WaitingForActivation) { _FirstTrezorTaskCompletionSource.SetResult(trezorManager); } TrezorInitialized?.Invoke(this, new TrezorManagerConnectionEventArgs <TMessageType>(trezorManager)); } finally { _ = _Lock.Release(); } }