我正在創建一個報告系統來檢查刀片的狀態。我知道下面的代碼是可行的,但它很慢。我查閱了有關運行Ping.SendAsync的信息,它看起來很有希望,但它不會在ping上運行狀態報告,除非它在處理程序中。問題在於,我需要訪問函數中的其他對象才能正確更改網頁。運行帶狀態消息的Ping.SendAsync
protected void RadGridDellBlade_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem)
{
thing1 t1 = new thing1();
BladeRunnerDataAccess td = new BladeRunnerDataAccess(t1);
try
{
Image icon = (Image)e.Item.FindControl("Dell_imgIcon");
BladeWorkstation blade = (BladeWorkstation)e.Item.DataItem;
Ping pingSender = new Ping();
PingReply reply = pingSender.Send(blade.IPAddress);
switch (reply.Status)
{
case IPStatus.Success:
icon.ImageUrl = "~/Images/GreenIcon.png";
break;
case IPStatus.TimedOut:
icon.ImageUrl = "~/Images/RedIcon.png";
break;
default:
icon.ImageUrl = "~/Images/GrayIcon.png";
break;
}
Image Dell_osbit = (Image)e.Item.FindControl("Dell_OSbit");
switch (blade.BladeOSID)
{
case 1:
Dell_osbit.ImageUrl = "~/Images/xp.png";
break;
case 2:
Dell_osbit.ImageUrl = "~/Images/32bit.png";
break;
case 3:
Dell_osbit.ImageUrl = "~/Images/64bit.png";
break;
}
}
catch (Exception ex)
{
}
finally
{
t1.Dispose();
}
}
}
此代碼的工作原理是一次只運行一個250個刀片,需要幾分鐘的時間。有沒有辦法做到這一點平行或與線程,並保持狀態檢查以及?我感謝任何幫助!
這個人使用PingAcync來做你想要做的事情。不知道他是使用.NET還是直接使用Power Shell,但是我偶然發現它在Power Shell中尋找解決方案。由於兩者非常相似,因此您可能能夠在腳本中找到您要查找的解決方案。其中一個很酷的功能是當我在ISE中運行它時有一個狀態指示器。雖然我沒有在ISE之外嘗試過。 https://gallery.technet.microsoft.com/scriptcenter/Fast-asynchronous-ping-IP-d0a5cf0e/ – YetAnotherRandomUser