If you are looking for to ping a remote machine and you want to record the state along with status and return time, below example can help you.

 

       private void Ping_Click(object sender, EventArgs e)
        {
            List domains = new List();
            domains.Add("www.bing.com");
            domains.Add("www.yahoo.com");
            domains.Add("jebarson.info");

            foreach (string domain in domains)
            {
                Ping pinger = new Ping();
                UserToken token = new UserToken() { Destination = domain, InitiatedTime = DateTime.Now };
                pinger.PingCompleted += new PingCompletedEventHandler(PingCompleted);
                pinger.SendAsync(domain, token);
            }
        }

        private void PingCompleted(object sender, PingCompletedEventArgs e)
        {
            UserToken token = (UserToken)e.UserState;
            Debug.Assert(true, string.Format("Reply from {0} with the status {1}", token.Destination, e.Reply.Status));
        }

        public class UserToken
        {
            public string Destination { get; set; }
            public DateTime InitiatedTime { get; set; }
        }

 

Always remember that the property e.Reply.Address will show up the correct destination IP address only if it is reachable. I would suggest you to go through the msdn urls http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.pingcompleted.aspx and http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.sendasync.aspx which will give you more insight.

Ping remote machines using .net