我如何每五分钟重新发送ping到我的IP地址列表
本文关键字:我的 IP 地址 列表 ping 新发送 何每 五分钟 | 更新日期: 2023-09-27 18:18:36
首先请原谅我,我对c#很陌生,在创建这个程序的同时,我正在努力自学这门语言。
我有一个IP地址列表,按钮为每个这些IP地址正在创建一个表布局面板内的flowlayoutpanel。每个按钮的Tag是该按钮的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.参数2:不能从"System.Windows.Forms"转换。到system . timer . elapsedeventargs3. system.timers。ElapsedEventArgs'不包含'Control'的定义,也没有扩展方法'Control'接受类型为'System.Timers '的第一个参数。可以找到ElapsedEventArgs'(您是否缺少using指令或程序集引用?)4 . System.Timers。ElapsedEventArgs'不包含'Control'的定义,也没有扩展方法'Control'接受类型为'System.Timers '的第一个参数。可以找到ElapsedEventArgs'(您是否缺少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;
}
}
有几种方法,但最简单的解决方案是使用Timer。
试试
Timer pingTimer;
void PingTimerStart()
{
pingTimer = new Timer(300000); // 300 seconds - 5 minutes
pingTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
pingTimer.Start();
}
void TimerTick(object source, ElapsedEventArgs e)
{
// Send ping code here
}