Ping over a period of time

I have a windows forms app that basically pings an ip and then returns an image with a tooltip that displays the rtt for that ip.

What I want to do is ping the ip form every 20 seconds so that the form and images change. If I could get this to work, I would like some kind of store, maybe 4 rtt, then show the average of 4 in the prompt.

So far the form is only pinged once, I've been playing around with the timer, but I really don't know what I'm doing. Here is my code so far.

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();



        }


    }
}

      

0


source to share


1 answer


Try the following:



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
    }
}

      

0


source







All Articles