ブレードのステータスを確認するためのレポートシステムを作成しています。私は下のコードがうまく動作していることを知っていますが、それは辛抱強く遅いです。私はPing.SendAsyncの実行に関する情報を調べたところ有望に見えましたが、ハンドラにない限りpingのステータスレポートは実行されません。その問題は、関数内の他のオブジェクトにアクセスして、Webページを正しく変更する必要があることです。ステータスメッセージ付き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枚のブレードを1つずつ実行し、数分かかります。これを並行して実行する方法やスレッドを実行する方法はありますか?私はどんな助けにも感謝します!
この男はあなたがやろうとしていることをするためにPingAcyncを使いました。彼が.NETまたはまっすぐなPower Shellを使用しているかどうかはわかりませんが、Power Shellのソリューションを探して見つけました。 2つは非常に似ているので、スクリプトで探している解決策を見つけることができます。優れた機能の1つは、ISEで実行したときにステータスインジケータが表示されることです。私はISEの外でそれを試していません。 https://gallery.technet.microsoft.com/scriptcenter/Fast-asynchronous-ping-IP-d0a5cf0e/ – YetAnotherRandomUser