/// <summary> /// New devices found. /// </summary> private void CallBack(List <AndroidDevice> list) { lock (devicesLock) { // Look for removed devices var removed = devices.Where(x => list.All(y => y.Serial != x.Serial)).ToList(); foreach (var device in removed) { devices.Remove(device); DeviceRemoved.Fire(this, new EventArgs <AndroidDevice>(device)); } // Look for added or changed devices foreach (var device in list) { var serial = device.Serial; var existing = devices.FirstOrDefault(x => x.Serial == serial); if (existing == null) { // Device added devices.Add(device); DeviceAdded.Fire(this, new EventArgs <AndroidDevice>(device)); } else if (existing.DeviceState != device.DeviceState) { // State changed devices.Remove(existing); devices.Add(device); DeviceStateChanged.Fire(this, new EventArgs <AndroidDevice>(device)); } } receivedInitialUpdate = true; Monitor.PulseAll(devicesLock); } }
/// <summary> /// A device has a state change. /// </summary> void OnDeviceStateChanged(object sender, EventArgs <AndroidDevice> e) { if (InvokeRequired) { Invoke(new EventHandler <EventArgs <AndroidDevice> >(OnDeviceStateChanged), sender, e); } else { RemoveItemsBySerial(e.Data.Serial); var item = new AndroidDeviceItem(e.Data); tvList.Items.Add(item); SetIsCompatible(item); ReloadList(); UpdateNoDevicesItem(); DeviceStateChanged.Fire(this, e); } }