我如何每五分钟重新发送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;
    }
}

我如何每五分钟重新发送ping到我的IP地址列表

有几种方法,但最简单的解决方案是使用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
}