【发布时间】:2014-10-11 15:21:11
【问题描述】:
首先原谅我,我对 C# 很陌生,我正在尝试在创建这个程序的同时自学这门语言。
我有一个 IP 地址列表,每个 IP 地址的按钮都是在 flowlayoutpanel 内的 tablelayoutpanel 上创建的。每个按钮的标签是按钮的 IP 地址。
现在,下面的代码会 ping 一次 IP 地址,并根据 ping 返回的方式将按钮从控件灰色变为红色或绿色。
private void tlp_ControlAdded(object sender, ControlEventArgs e)
{
IPAddress ip;
if(IPAddress.TryParse((string)e.Control.Tag,out ip))
{
Ping pingIt = new Ping();
pingIt.PingCompleted += pingIt_PingCompleted;
pingIt.SendAsync(ip, 2000, e.Control);
}
}
void pingIt_PingCompleted(object sender, PingCompletedEventArgs e)
{
Control ctrl = (Control)e.UserState;
if (e.Reply.Status == IPStatus.Success)
{
ctrl.BackColor = Color.Lime;
}
else
{
ctrl.BackColor = Color.Red;
ctrl.ForeColor = Color.White;
}
}
我希望程序做的是每五分钟重新 ping 一次这些 IP 地址,直到表单关闭,如果 ping 响应发生任何变化,则为按钮着色。
编辑:::: 所以你的建议是这样的?只有我从代码中得到 4 个错误。
1. 'SCA_Up_Tool.Form2.TimerTick(object, System.Timers.ElapsedEventArgs)' 的最佳重载方法匹配有一些无效参数 2.Argument 2:无法从 'System.Windows.Forms.ControlEventArgs' 转换为 'System.Timers.ElapsedEventArgs' 3.System.Timers.ElapsedEventArgs'不包含'Control'的定义,并且找不到接受'System.Timers.ElapsedEventArgs'类型的第一个参数的扩展方法'Control'(您是否缺少使用指令或程序集参考?) 4.“System.Timers.ElapsedEventArgs”不包含“Control”的定义,并且找不到接受“System.Timers.ElapsedEventArgs”类型的第一个参数的扩展方法“Control”(您是否缺少 using 指令或汇编参考?)
System.Timers.Timer pingTimer;
private void tlp_ControlAdded(object sender, ControlEventArgs e)
{
PingTimerStart(sender, e);
}
void PingTimerStart(object sender, ControlEventArgs e)
{
pingTimer = new System.Timers.Timer(300000); // 300 seconds - 5 minutes
pingTimer.Elapsed += new ElapsedEventHandler(TimerTick(sender, e));
pingTimer.Start();
}
void TimerTick(object source, ElapsedEventArgs e)
{
IPAddress ip;
if (IPAddress.TryParse((string)e.Control.Tag, out ip))
{
Ping pingIt = new Ping();
pingIt.PingCompleted += pingIt_PingCompleted;
pingIt.SendAsync(ip, 2000, e.Control);
}
}
void pingIt_PingCompleted(object sender, PingCompletedEventArgs e)
{
Control ctrl = (Control)e.UserState;
if (e.Reply.Status == IPStatus.Success)
{
ctrl.BackColor = Color.Lime;
}
else
{
ctrl.BackColor = Color.Red;
ctrl.ForeColor = Color.White;
}
}
【问题讨论】:
-
使用计时器 - 这就是它们的用途!
标签: c# ip-address ping