private void SearchIp() { IPAddress addr; if (!IPAddress.TryParse(SearchIpAddr.Value, out addr)) { _searchFailed.OnNext(true); return; } var busy = _discoverBusy.ProcessStart(); _devices.Clear(); SwMainApi.DiscoverWithIp(addr).Subscribe(d => _devices.Add(d), (ex) => { _searchFailed.OnNext(true); busy.Dispose(); }, () => { _searchFailed.OnNext(!_devices.Any()); busy.Dispose(); }); }