Ping一段时间

时间:2012-11-19 16:38:05

标签: c# time

我有一个Windows窗体应用程序,它基本上ping了一个ip,然后返回一个带有工具提示的图像,显​​示该IP的rtt。

我想做的是每隔20秒使ip表格ping一次,这样表格和图像就会改变。如果我可以让它工作,那么我想一些如何存储可能4 rtt然后显示工具提示中的4的平均值。

到目前为止,表单只是ping一次,我玩了一个计时器,但我真的不知道我在做什么。到目前为止,这是我的代码。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.NetworkInformation;
using System.ServiceProcess;
using System.Threading;
using System.ComponentModel;



namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            Ping pingClass = new Ping();
            PingReply pingReply = pingClass.Send("10.209.123.123");
            label4.Text = (pingReply.RoundtripTime.ToString());
            //+ "ms");
            label5.Text = (pingReply.Status.ToString());



            if (Convert.ToInt32(label4.Text) > 0 && Convert.ToInt32(label4.Text) < 100)
                this.pictureBox1.Load("greenLAT.png");

            if (Convert.ToInt32(label4.Text) > 100 && Convert.ToInt32(label4.Text) < 200)
                this.pictureBox1.Load("yellowLAT.png");

            if (Convert.ToInt32(label4.Text) > 200 && Convert.ToInt32(label4.Text) < 1000)
                this.pictureBox1.Load("redLAT.png");

            ToolTip tt = new ToolTip();
            tt.SetToolTip(this.pictureBox1, "Your current network delay is " + label4.Text + "ms");

            timer1.Interval = 1000;
            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Start();

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //MessageBox.Show("Timeout!");
            Refresh();



        }


    }
}

1 个答案:

答案 0 :(得分:0)

试试这个:

using System;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Net;
using System.Windows.Forms;
using System.Net.NetworkInformation;



namespace DXWindowsApplication4
{
    public partial class Form2 : Form
    {
        private readonly Timer _timer;
        private readonly Ping _pingClass;
        private readonly IPAddress _ipAddress;
        private readonly int _timeout;

        private Image _greenImage; 
        private Image _yellowImage; 
        private Image _redImage; 

        private int _pingCount;
        private long _avgRtt;

        public Form2()
        {
            InitializeComponent();
            IPAddress.TryParse("98.138.253.109", out _ipAddress); // yahoo.com Ip address
            _timer = new Timer();
            _timeout = 3000;
            _pingClass = new Ping();
            _pingClass.PingCompleted += PingClassPingCompleted;
        }

        void PingClassPingCompleted(object sender, PingCompletedEventArgs e)
        {
            RefreshPing(e.Reply);
        }

        public void FormLoad(object sender, EventArgs e)
        {
            _timer.Tick += TimerTick;
            _timer.Interval = 4000;
            _timer.Start();
        }

        private void TimerTick(object sender, EventArgs e)
        {
            _pingClass.SendAsync(_ipAddress, _timeout);
        }

        private void RefreshPing(PingReply pingReply)
        {
            label4.Text = (pingReply.RoundtripTime.ToString(CultureInfo.InstalledUICulture));
            label5.Text = (pingReply.Status.ToString());

            _avgRtt = (_avgRtt * _pingCount++ + pingReply.RoundtripTime)/_pingCount;

            if (Convert.ToInt32(label4.Text) > 0 && Convert.ToInt32(label4.Text) < 100)
            {
                SetImage(pictureBox1, Images.Green);
            }

            if (Convert.ToInt32(label4.Text) > 100 && Convert.ToInt32(label4.Text) < 200)
            {
                SetImage(pictureBox1, Images.Yellow);
            }

            if (Convert.ToInt32(label4.Text) > 200 && Convert.ToInt32(label4.Text) < 1000)
            {
                SetImage(pictureBox1, Images.Red);
            }

            ToolTip tt = new ToolTip();
            tt.SetToolTip(pictureBox1, "Your average network delay is " + _avgRtt + "ms");
            Refresh();
        }

        private void SetImage(PictureBox pBox, Images images)
        {
            switch (images)
            {
                case Images.Green:
                    if (_greenImage == null)
                    {
                        _greenImage = new Bitmap("greenImage.png");
                    }

                    pictureBox1.Image = _greenImage;
                    break;
                case Images.Yellow:
                    if (_greenImage == null)
                    {
                        _yellowImage = new Bitmap("yellowImage.png");
                    }

                    pictureBox1.Image = _yellowImage;
                    break;
                case Images.Red:
                    if (_redImage == null)
                    {
                        _redImage = new Bitmap("redImage.png");
                    }

                    pictureBox1.Image = _greenImage;
                    break;
                default:
                    throw new InvalidEnumArgumentException("invalid enum name");
            }
        }
    }

    internal enum Images
    {
        Green,
        Yellow,
        Red
    }
}