【问题标题】:How do I resend pings every five minutes to my list of IP Addresses如何每五分钟向我的 IP 地址列表重新发送 ping
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2012-07-15
    • 2020-02-21
    • 2013-06-23
    • 2018-01-14
    • 2011-06-24
    相关资源
    最近更新 更多