.Net我该怎么做? (与计时器合作)

时间:2016-03-05 17:40:54

标签: c# .net timer

有WinForms应用程序。 其功能(例如) - 在企业域中Ping机器。 让我们想象一下,用户在应用程序中为ping创建了两个对象--Comp1和Comp2。 最主要的功能 - 程序应该给用户一个选择 - 通过你需要ping什么样的计算机。 例如,Comp1用户的可用性希望每15分钟监控每分钟和Comp2可用性。 我怎样才能在.NET上实现它?以编程方式为每个新的Comp [number] Timer对象创建?

也许有人已经遇到过这样的挑战,一个很大的要求帮助我..

3 个答案:

答案 0 :(得分:1)

如果要查看Comp2是否可以访问Comp2(网络方式),可以在Comp1上运行以下代码

Ping ping = new Ping();
PingReply reply = new Ping().Send(Comp1IP);
return reply.Status == IPStatus.Success

答案 1 :(得分:1)

你必须使用2个计时器。

制作winform,允许用户使用NumericUpDown控件选择时间间隔,或者找到更好的方法。

将间隔设置为指定的毫秒数(60000 = 1分钟,900000 = 15分钟)Tick事件将启动ping通过

- Ping课程:

Ping class on MSDN

 public static int GetPing(string ip, int timeout)
    {
        int p = -1;
        using (Ping ping = new Ping())
        {
                PingReply reply = ping.Send(_ip, timeout);
                if (reply != null)
                    if (reply.Status == IPStatus.Success)
                        p = Convert.ToInt32(reply.RoundtripTime);
        }
        return p;
    }

- 提示

这是你通过cmd发送命令的方式,所以你不会使用.net framwework,但是内置工具的窗口:

string strCmdText;
strCmdText= "timeout 60 & ping 127.0.0.1";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);

超时60将等待60秒,然后它将ping。然后,如果ping失败,您将在屏幕上看到

要仅使用一个计时器,请将刻度设置为1分钟,并在刻度中增加计数器变量。每次打勾(1分钟)它将ping comp1,当15的计数器模数为0(计数器%15 == 0)时你将ping comp2

答案 2 :(得分:0)

另一个想法 - 只创建一个通用计时器tmrTimer,它将每分钟运行一次。 对于每个Comp [number]刷新间隔和上次ping的时间,应用程序将保留在数据库/内存中。 在每分钟行程中,tmrTimer_Tick将检查每个Comp [number]的所有数据。 如果差异(当前时间 - 最后一次ping [编号])>比这个Comp [number]的所需刷新间隔 - 应用程序将ping [编号],更新最后一次ping他当前时间......

是不是太容易了?