使用的HttpClient我想在通用的Windows平台如何快速检查HTTP成功IP地址具有范围200,而在UWP
定的URI使用类HttpClient
的HTTP成功200在本地网络IP地址的快速检查范围
如果成功添加到列表。如果失败放弃快速下一步迭代。
这里是我使用的示例代码。
private async void ScanLocalNetwork()
{
string localIpAddress = GetLocalIpAddress();
if (!string.IsNullOrEmpty(localIpAddress))
{
List<IPAddress> IpAddressList = new List<IPAddress>();
IpAddressList = GetListOfLocalIpAddresses(localIpAddress);
ListOfScannedIpAddresses = new ObservableCollection<string>();
foreach (var ipAddress in IpAddressList)
{
IsSearchingVisible = true; //show progress ring for list
var validAddress = await SendHttpRequest(ipAddress.ToString());
if (validAddress)
{
ListOfScannedIpAddresses.Add(ipAddress.ToString());
}
}
IsIpListVisible = true;
IsSearchingVisible = false;
}
}
private async Task<bool> SendHttpRequest(string ipAddressToCheck)
{
HttpResponseMessage reposneMsg;
string address = String.Empty;
address = "http://" + ipAddressToCheck + "/RemoteControl/Volume/get";
var uri = new Uri(address, UriKind.Absolute);
using (HttpClient client = new HttpClient())
{
//IsChecking = true;
try
{
reposneMsg = await client.GetAsync(uri);
return reposneMsg.IsSuccessStatusCode;
}
catch (Exception)
{
return false;
}
}
}
这种方法虽然速度慢,但有效。任何想法如何加快速度呢?
使用'Parallel.ForEach'循环,但我想你应该改变'ObservableCollection'为一些线程安全的集合。 –
我检查了Parallel.ForEach,但是这阻止了我不想要的UI。 – hal9k2